android - DialogFragment 回调 Activity ,但希望 Activity 更新另一个 fragment

标签 android android-fragments

如何让我的 Activity 更新它控制的 fragment ?它是这样的,我有一个 DatePickerDialog,当你在 Fragment 中调用它时。我有一个回拨给 Activity ,让它知道这个 datepickerdialog 何时完成,选择了一个返回所选日期的日期。所以我的 Activity 有它,但我希望调用 DialogFragment 的 fragment 能够访问它,而不是上面的 Activity 。这可能吗?

所以我有这个 EditSessionActivity,它在其中调用 SessionEdit Fragment。它加载了带有 UI 和日期按钮的 fragment ,当它被点击时,一个名为 DatePickerDialogFragmentDialogFragment 被启动,这很好用,并回调到 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/

相关文章:

android - 如何自动保存和加载用户输入的kivy

android - 如何管理音乐播放应用程序 Android

android - 如何在 Activity 之间传递 double 的二维数组?

java - Android - 错误膨胀类 fragment - XML 文件

android - 在 Fragment 中实现 DatePicker

android - native 崩溃信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR)

android - 服务\远程服务

java - 如何更改我的 fragment 中的文件 XML 属性

android - 在方向更改按钮上,touchlistener 不工作

android - 在 fragment 中使用 AdapterViewFlipper 来创建图像 slider