我正在尝试使用otto将事件从片段传递到对话框。不幸的是,在创建对话框时,事件已经触发,对话框中的@Subscribe方法和正在发送的数据都会被传递。
我想要传递的数据是来自listview / ArrayList的Object和索引(Best case)或String(最坏情况)。
我知道他们有@Produce方法;但我不明白一个不带参数的方法无论如何都有帮助,或者我怎么能让它起作用。
以下是他们提供的示例
@Produce public AnswerAvailableEvent produceAnswer() {
// Assuming 'lastAnswer' exists.
return new AnswerAvailableEvent(this.lastAnswer);
}
对于我新创建的对话框this.lastAnswer;不会存在,它不会 - 这就是我传递的东西。所以我该如何解决这个问题呢?
旁注: 我认为事件总线,它的当前形式有点矫枉过正,因为它只与我的对话通信。后来我希望在更多的dialogfrag / fragment通信中使用事件总线。
答案 0 :(得分:0)
当我调查奥托时,我也为自己问了同样的问题。并决定更仔细地阅读他们的网站(http://square.github.io/otto/)。 这是他们在@Produce注释下的描述:
... 生产者,如订阅者,也必须注册...... 注册时,生成器方法将是 为先前为其注册的每个订户呼叫一次 类型。每个新方法也会调用一次producer方法 订阅相同类型的事件。
每次注册时,每个事件类型可能只有一个生产者 一辆公共汽车。
所以我想及时注册你的制作人," lastAnswer"应该初始化。 并且不需要参数,因为您不必自己调用生产者方法。 我希望它会有所帮助。