如何让我的 Activity 更新它控制的 fragment ?它是这样的,我有一个 DatePickerDialog,当你在 Fragment 中调用它时。我有一个回拨给 Activity ,让它知道这个 datepickerdialog 何时完成,选择了一个返回所选日期的日期。所以我的 Activity 有它,但我希望调用 DialogFragment 的 fragment 能够访问它,而不是上面的 Activity 。这可能吗?
所以我有这个 EditSessionActivity
,它在其中调用 SessionEdit Fragment
。它加载了带有 UI 和日期按钮的 fragment ,当它被点击时,一个名为 DatePickerDialogFragment
的 DialogFragment
被启动,这很好用,并回调到 EditSessionActivity
实现了我编写的 OnDialogDoneListner
。数据在那里,但我想将该数据推送回 SessionEdit
fragment 以更新其 UI。我该怎么做呢?
今天早些时候我以为我会很容易地让它工作,试着在这里回答一些问题:
How to create datePicker and timePicker dialogs in fragment class?
意识到我的 UpdateDisplay(来自上面的链接)在上面的链接中确实像我想要的那样从调用 fragment 更新按钮文本。
最佳答案
fragment 需要与其父 Activity 通信,反之亦然。为两者定义一个接口(interface),以符合并允许适当的监听器订阅事件。例如,我会说任何时候 fragment 想要在自身之外更改 UI,这应该委托(delegate)给 Activity。一个 fragment 不应该知道或关心是否存在其他 fragment 。 (有趣的是,如果 Fragment 想要一个三明治,它应该调用“sudo make me a sandwich”)
假设这是一个电子邮件客户端, fragment 希望用户选择一个附件。它应该调用类似 MyParentActivity.selectAttachment(AttachmentSelectedCallback) 的方法。如果这是一个 tablet,Activity 可能会调用一个新的 fragment ,使 compose fragment 可见。如果这是一部手机,可能会启动一个新的 Activity,或者将现有的 Fragment 换成附件选择器。
我考虑 Activity/Fragment 关系的一种方式是微内核的设计方式。 Activity是内核,Fragment是服务。内核管理通信和启动或关闭服务,但一般来说服务不应该直接知道彼此。请注意,此设计的性能损失并不总是值得权衡。
关于android - DialogFragment 回调 Activity ,但希望 Activity 更新另一个 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6713186/