MainActivity 有一个 NavigationDrawer,每个导航菜单都带有 Fragment 而不是新的 Activity。
有设置 fragment ,如果我更改导航菜单的顺序,它应该立即反射(reflect)到 NavigationDrawerFragment。
我在 SettingsFragment 中发布事件,但它没有出现在 NavigationDrawerFragment 中。
我做了一个AndroidBus extends Bus
public class AndroidBus extends Bus {
private final Handler mainThread = new Handler(Looper.getMainLooper());
public AndroidBus() {
super(ThreadEnforcer.ANY);
}
@Override
public void post(final Object event) {
if (BuildConfig.DEBUG) Ln.d("BUS: SYNC current thread="+Thread.currentThread().getName()+", post=" + event + " bus=" + this);
if (Looper.myLooper() == Looper.getMainLooper()) {
super.post(event);
} else {
mainThread.post(new Runnable() {
@Override
public void run() {
post(event);
}
});
}
}
@Override
public void register(Object object) {
super.register(object);
if (BuildConfig.DEBUG) Ln.d("BUS: SYNC current thread="+Thread.currentThread().getName()+", register=" + object + " bus=" + this);
}
@Override
public void unregister(Object object) {
super.unregister(object);
if (BuildConfig.DEBUG) Ln.d("BUS: SYNC current thread="+Thread.currentThread().getName()+", unregister=" + object + " bus=" + this);
}
}
然后我通过 Dagger 将总线对象注入(inject)每个 fragment 我在 onActivityCreated 中注册 fragment ,并在 DestroyView 中注销它。
如果我发布的事件没有被传送,我会看到 DeadEvent 日志。
08-07 11:00:27.203 3519-3519/com.test.app.debug D//AndroidBus.java:40﹕ main BUS: SYNC current thread=main, register=com.test.app.ui.MainActivity@536fa3b0 bus=[Bus "default"]
08-07 11:00:27.231 3519-3519/com.test.app.debug D//AndroidBus.java:40﹕ main BUS: SYNC current thread=main, register=NavigationDrawerFragment{536b79a4 #0 id=0x7f0a0072} bus=[Bus "default"]
08-07 11:00:27.247 3519-3519/com.test.app.debug D//MainActivity.java:127﹕ main SYNC: register: bus=[Bus "default"]
08-07 11:00:27.251 3519-3519/com.test.app.debug D//AndroidBus.java:40﹕ main BUS: SYNC current thread=main, register=SettingsFragment{536b7a2c #1 id=0x7f0a0071} bus=[Bus "default"]
08-07 11:00:31.415 3519-3519/com.test.app.debug D//AndroidBus.java:24﹕ main BUS: SYNC current thread=main, post=com.test.app.events.SettingsUpdatedEvent@536d1aa4 bus=[Bus "default"]
08-07 11:00:31.415 3519-3519/com.test.app.debug D//AndroidBus.java:24﹕ main BUS: SYNC current thread=main, post=com.squareup.otto.DeadEvent@5352027c bus=[Bus "default"]
我也在 onCreate 方法中注册了 MainActivity,如果我在 MainActivity 中订阅了相同的事件,它就会收到该事件。
感谢您阅读本文,我希望有人能就此启发我。
最佳答案
我重新审视了这个问题,发现了我的愚蠢。原因是我使用了不同的 @Subscribe
注解。当您同时使用 Otto
和 Guava
库时,可能会发生这种情况。因此,当您在 Android 应用中同时使用这两个库时,请注意这一点。
-import com.google.common.eventbus.Subscribe;
+import com.squareup.otto.Subscribe;
关于android - Otto(事件总线),将事件 fragment 发送到 fragment 但不接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25173145/