从DialogFragment接收回(片段)数据的最佳方法是什么?

Eug*_*ene 2 android

我正在用一个如此简单的想法来对抗几天,就像收回一个数据DialogFragment.首先,我试图创建一个DialogFragment嵌套类,但它发生了方向更改失败.然后我决定用户interfaces传递listener给a DialogFragment,但是这里有一个关于如何坚持listener后的问题orientation change.然后来自这里的人建议使用setTargetFragment(),但由于已知问题,它也不起作用.

这是一个常见的任务,你们如何从DialogFragments 获取数据.

Chr*_*rry 5

使用接口和连接onAttach(Activity)绝对有效,Google提供的示例建议以这种方式在组件之间进行通信,但绝对有更好的方法.Square推出了一个很好的解决方案,你可以在这里找到:

http://corner.squareup.com/2012/07/otto.html

这是一个事件总线,您可以注册接收事件通知,并真正解耦您的组件通信代码.

要注册DialogFragment中的活动(比如说,您已获得所需的数据,而您即将解散,因此您的活动会通过数据通知所有相关方),您在活动中所做的只是:

bus.register(this);
Run Code Online (Sandbox Code Playgroud)

然后在同一个Activity中你会有类似的东西:

@Subscribe
public void dataChanged(DataChangedEvent event) {
    // TODO React to data.
}
Run Code Online (Sandbox Code Playgroud)

那么DialogFragment只需要调用类似的东西:

bus.post(new DataChangedEvent(/*your data here*/));
Run Code Online (Sandbox Code Playgroud)

并且会通知您的活动.没有将您的活动耦合到您的碎片,也没有跟踪听众.