3

过去几天我一直在和 Otto 一起玩,这真是太棒了。但是,我遇到了一个问题,我正在尝试从 Fragment 与 Activity 进行通信。为了简单起见,我有一个 Activity 来保存 Fragment,并且在 Fragment 中我有一个 Button,它只是发布一个事件。

@Inject Bus bus;
...
...
bus.post(new ReadStatusEvent("23"));

在活动中,我有一个订阅方法。

@Subscribe
public void onReadStatusEvent(ReadStatusEvent event){
    Timber.i("sub:"+event.getReadStatusID());
}

这是活动

public class ReadStatusEvent {
  private final String readStatusID;

  public ReadStatusEvent(String readStatusID) { this.readStatusID = readStatusID; }

  public String getReadStatusID() { return readStatusID; }
}

我正在使用 Dagger,所以我的 Otto Bus 是一个由 SimpleModule 文件注入的单例。

@Provides @Singleton
Bus provideBus() {
    return new Bus(ThreadEnforcer.ANY);
}

我一整天都在努力,但由于某种原因,从未调用过 Subscribe 方法。

编辑:我刚刚尝试使用Android Studio 的 Otto 插件,每当我点击 @Subscribe 或 bus.post(..) 时,它都会继续搜索但没有找到任何东西(到目前为止没有找到任何用法)。我想我在某个地方做错了什么。

4

2 回答 2

11

您关于 Otto 插件的提示让我想到了您的导入。

您确定您使用的是“com.squareup.otto.Subscribe”而不是“com.google.common.eventbus.Subscribe”或任何其他包吗?

于 2014-03-14T16:35:01.570 回答
0

为了接收事件,类实例需要向总线注册。您是否正在注册持有订阅者/生产者的对象?

bus.register(this); // Example
于 2014-03-13T16:24:32.660 回答