我不是新來使用事件總線,但我得到了在以下情況下奇怪的行爲:奧托事件總線無法從活動發射到另一個活動與片段
我有MainActivity其中有需要更新兩個片段的內容使用從MainActivity啓動的SecondActivity中的Otto
事件總線。問題是,當SecondActivity啓動時,MainActivity暫停,因此總線將在方法內取消註冊,並且EventBus
從SecondActivity觸發它的事件時,它將不會被MainActivity下的兩個片段接收。
順便說一句,MainActivity有一個訂戶方法來接收來自AsyncTask
線程的更新,因此它也應該註冊和取消註冊事件總線。
這裏是我BusProvider
類代碼:
public class BusProvider {
private static final Bus BUS = new Bus(ThreadEnforcer.ANY);
public static Bus getInstance() {
return BUS;
}
private BusProvider() {
}
}
這裏是MainActivity我的事件總線代碼:
@Override
protected void onResume() {
super.onResume();
bus.register(this);
}
@Override
protected void onPause() {
super.onPause();
bus.unregister(this);
}
@Subscribe
public void onAsyncResult(SomeEvent event) {
// do something
}
這是我FragmentA和FragmentB事件總線代碼:
@Override
protected void onResume() {
super.onResume();
bus.register(this);
}
@Override
protected void onPause() {
super.onPause();
bus.unregister(this);
}
@Subscribe
public void onValueUpdate(UpdateEvent event) {
mTvValue.setText(event.value);
}
現在這個代碼在SecondActivity裏面,我需要更新它的兩個片段:
BusProvider.getInstance().post(new UpdateEvent("Value Updated!"));
請告訴我發生的是,從所述SecondActivity火災UpdateEvent
而不是由兩個片段A和B.
任何有用的答案被理解接收。
它解決了,我很欣賞你的幫助。 – blueware