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

时间:2012-07-20 15:28:18

标签: android

我正在用一个像DialogFragment收回数据这样简单的想法来对抗几天。首先,我尝试将DialogFragment作为嵌套类,但它在方向更改时失败了。然后我决定使用interfaceslistener传递给DialogFragment,但是如果在listener之后如何保留orientation change则存在问题。然后,此处有人建议使用setTargetFragment(),但由于known issue,它也无效。

这是一项常见的任务,你们如何从DialogFragment获取数据。

3 个答案:

答案 0 :(得分:5)

使用接口,并在onAttach(Activity)中连接肯定有效,the example given by Google建议以这种方式在组件之间进行通信,但绝对有更好的方法。 Square推出了一个很好的解决方案,你可以在这里找到:

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

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

要从DialogFragment注册活动(例如,您已获得所需的数据,而您即将解散,因此您的活动会通知所有感兴趣的各方)您在活动中所做的一切都是:

bus.register(this);

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

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

然后DialogFragment只需要调用类似的东西:

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

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

答案 1 :(得分:3)

使用接口绝对是最好的方法。 在DialogFragment中,在onAttach(Activity)中注册听众,即使更改了方向,您也可以收到回调。

答案 2 :(得分:0)

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