奥托从片段到活动的沟通

时间:2014-03-13 15:52:25

标签: android android-fragments android-activity otto

过去几天我一直在和奥托一起玩,这太棒了。然而,我遇到了一个问题,我试图从片段到活动进行交流。为了简单起见,我有一个活动来保存片段,而在片段中我有一个按钮,它只是简单地发布一个事件。

@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方法。

修改:我刚刚尝试使用Otto plugin for Android Studio,每当我点击@Subscribe或bus.post(..)时,它都会继续搜索但找不到任何内容(到目前为止没有找到用法)。我想我在某处做了一件非常糟糕的事情。

2 个答案:

答案 0 :(得分:11)

你对奥托插件的暗示让我想到了你的进口。

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

答案 1 :(得分:0)

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

bus.register(this); // Example