Android EventBus在Fragment中不起作用的解決方法
一、AndroidEventBus。
二、問題出現情形。
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中初始化標題會有個延時情況,如果採用第一種方式,則不會顯示標題。