2

我正在与一个简单的想法斗争几天,比如从DialogFragment. 首先,我尝试将 aDialogFragment作为嵌套类,但它发生在方向更改时失败。然后我决定用户interfaces将 a 传递listener给 a DialogFragment,但这里有一个关于如何坚持listenerafter的问题orientation change。然后这里有人建议使用,但由于已知问题setTargetFragment(),它也不起作用。

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

4

3 回答 3

5

使用接口和连接onAttach(Activity)肯定是可行的,谷歌给出的示例建议以这种方式在组件之间进行通信,但肯定有更好的方法来做事。Square提出了一个不错的解决方案,您可以在这里找到:

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

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

要从您的 DialogFragment 注册一个事件(例如,您已经获得了所需的数据并且您即将关闭,因此您的事件会通知所有相关方数据),您在 Activity 中要做的就是:

bus.register(this);

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

@Subscribe
public void dataChanged(DataChangedEvent event) {
    // TODO React to data.
}

然后 DialogFragment,只需要调用类似:

bus.post(new DataChangedEvent(/*your data here*/));

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

于 2012-08-07T20:52:31.943 回答
3

使用接口绝对是最好的方法。在您的DialogFragment中,注册监听器,onAttach(Activity)即使在方向更改后,您也将能够收到您的回调。

于 2012-07-20T20:42:33.353 回答
0

每当您将逻辑活动附加到片段管理器时,请务必使用标记的附加参数。然后,在onCreate您的 DialogFragment 中,只需调用getFragmentManager().findFragmentByTag("parent fragment");即可获取对父级的引用。

于 2012-08-07T19:42:59.077 回答