Otto(事件总线),将事件片段发送到片段但不接收

Chk*_*ger 4 android otto

MainActivity有一个NavigationDrawer,每个导航菜单都会带来Fragment而不是新的Activity.

有设置片段,如果我更改导航菜单的顺序,它应立即反映到NavigationDrawerFragment.

我在SettingsFragment中发布了事件,但它没有出现在NavigationDrawerFragment上.

我做了一个AndroidBus扩展总线

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我通过Dagger将每个片段注入总线对象,然后在onActivityCreated中注册片段,并将其注销到onDestroyView.

如果我发布事件它没有交付,我看到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"]
Run Code Online (Sandbox Code Playgroud)

我也在onCreate方法中注册MainActivity,如果我在MainActivity中订阅相同的事件,它会收到事件.

感谢您阅读本文,我希望有人能够启发我.

Chk*_*ger 12

我重新审视了这个问题,发现了我的愚蠢.原因是我使用了不同的@Subscribe注释.当你同时使用它们OttoGuava库时会发生这种情况.因此,当您在Android应用中使用这两个库时,请注意这一点.

-import com.google.common.eventbus.Subscribe;
+import com.squareup.otto.Subscribe;
Run Code Online (Sandbox Code Playgroud)