使用Otto与对话框进行双向通信

时间:2013-11-19 20:57:26

标签: android android-dialogfragment

我正在尝试使用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通信中使用事件总线。

1 个答案:

答案 0 :(得分:0)

当我调查奥托时,我也为自己问了同样的问题。并决定更仔细地阅读他们的网站(http://square.github.io/otto/)。 这是他们在@Produce注释下的描述:

  

...   生产者,如订阅者,也必须注册......   注册时,生成器方法将是   为先前为其注册的每个订户呼叫一次   类型。每个新方法也会调用一次producer方法   订阅相同类型的事件。

     

每次注册时,每个事件类型可能只有一个生产者   一辆公共汽车。

所以我想及时注册你的制作人," lastAnswer"应该初始化。 并且不需要参数,因为您不必自己调用生产者方法。 我希望它会有所帮助。