我正在用一个如此简单的想法来对抗几天,就像收回一个数据DialogFragment.首先,我试图创建一个DialogFragment嵌套类,但它发生了方向更改失败.然后我决定用户interfaces传递listener给a DialogFragment,但是这里有一个关于如何坚持listener后的问题orientation change.然后来自这里的人建议使用setTargetFragment(),但由于已知问题,它也不起作用.
这是一个常见的任务,你们如何从DialogFragments 获取数据.
使用接口和连接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)
并且会通知您的活动.没有将您的活动耦合到您的碎片,也没有跟踪听众.
| 归档时间: |
|
| 查看次数: |
2568 次 |
| 最近记录: |