如何让我的活动更新它控制的片段?就像这样,我有一个DatePickerDialog,当你在Fragment中调用它时。我有一个回调活动的电话,让它知道这个datepickerdialog何时完成了选择的日期,该日期会传回所选的日期。所以我的活动有它,但我希望调用DialogFragment的Fragment能够访问它,而不是上面的活动。这可能吗?
所以我有EditSessionActivity
,在其中调用SessionEdit Fragment
。使用UI和日期按钮加载片段,单击该按钮时会启动名为DialogFragment
的{{1}},这很有用,并回调实现{{1}的DatePickerDialogFragment
我写的。数据存在,但我想将该数据推回EditSessionActivity
片段以更新其UI。我该怎么做呢?
今天早些时候,我以为我很容易让这个工作起来,试图回答一下:
How to create datePicker and timePicker dialogs in fragment class?
意识到我在上面链接中的UpdateDisplay(来自上面的链接)确实是为了更新我想要的调用片段中的按钮文本。
答案 0 :(得分:9)
Fragment需要与其父Activity通信,反之亦然。定义一个接口,以便符合并允许适当的侦听器订阅事件。例如,我想说,只要片段想要在自身外部更改UI,就应该委托给Activity。 One Fragment不应该知道或关心是否存在其他碎片。 (可笑的是,如果Fragment想要一个三明治,它应该叫'sudo让我成为一个三明治')
假设这是一个电子邮件客户端,Fragment希望用户选择附件。它应该调用MyParentActivity.selectAttachment(AttachmentSelectedCallback)之类的东西。如果这是一个平板电脑,可能Activity会调用一个新片段,让compose片段可见。如果这是一部手机,可能会启动一个新的活动,或者为附件选择器换出现有的片段。
我正在考虑Activity / Fragment关系的一种方式是微内核的设计方式。 Activity是内核,Fragment是服务。内核管理通信,启动或关闭服务,但一般来说服务不应该直接相互了解。请注意,此设计存在性能损失,并不总是值得权衡。
答案 1 :(得分:1)
如果您在此页面中看到TitleFragment
示例:http://developer.android.com/guide/topics/fundamentals/fragments.html
每当创建DetailsFragment
中的新索引而不是更新现有UI本身时,您将看到创建TitleFragment
的新实例。每次要更改视图时,您可能希望创建片段的新实例。