一、AndroidEventBus。
android平臺事件總線框架。介紹:https://github.com/bboyfeiyu/AndroidEventBus/blob/master/README-ch.md
二、問題出現情形。
AndroidEventBus在Fragment中註冊,由其他地方向Fragment中post事件。
三、問題出現原因。
由其他地方向Fragment post事件的時候,Fragment還未初始化,也即AndroidEventBus在此Fragment中還未註冊,所以收不到事件。
四、問題解決辦法。
1.在程序中想辦法先初始化此Fragment,比如app中首頁四個Tab分頁,由第一個分頁向第三個分頁post事件時,如果剛進入app且沒有操作的情況下,第三個Fragment一般都是未初始化的,這種情況可以在進入默認第一個分頁時先進入第三個分頁,然後立馬再切換到第一個分頁,這樣用戶是看不出切換過程的,而第三個Fragment也初始化了。示例代碼如下:
setTabSelection(2);//先選擇第三個Tab分頁
setTabSelection(0);//然後立馬切換到默認的第一個Tab分頁
在這之後在post事件,應該就沒問題了。
2.採用延時post的形式。即先切換到要post事件的Fragment,等待幾十毫秒後再post事件,這樣既可解決未初始化問題。
五、特殊情況
在這樣有個特殊情況,如果在Fragment中使用了TabLayout,則只能採用延時的方式。因爲TabLayout在Fragment中初始化標題會有個延時情況,如果採用第一種方式,則不會顯示標題。
Fragment中使用TabLayout參考:http://blog.csdn.net/wblyuyang/article/details/50501955