2

如果我想显示一个带有一些自定义XML的对话框,我可以使用DialogFragment。DialogFragment与主题为对话框的活动相对吗?

但是我也可以使用一个Activity来给它一个Dialog主题,这很方便,因为活动可以互相交谈,而片段不能,这使得交流变得更容易一些。

有没有什么好的理由说明我不应该这样做?优缺点都有什么?

回答

1

DialogFragment被认为是显示复杂对话框的Android方法。如果您遇到的唯一问题是与活动或对话框中的片段进行通信 - 则有一些简单的解决方案。其中之一 - 发送响应来自片段的活动,您可以使用界面。此外,显示DialogFragment比启动新活动更快。 DialogFragment的另一个优点是,从片段到活动的数据传递比从活动到活动更容易(这需要将对象作为意图附加组件)。

1

如果我想显示一个带有一些自定义XML的对话框,我可以使用一个 DialogFragment。

是的,我们可以在用于定义自定义布局的DialogFragment.onCreateView()的onCreateView()模板方法回调中定义布局。

不过,我也可以用一个活动来代替,并给它一个对话的主题, 这是方便,因为可以活动,而 片段不能彼此交谈,这让通信变得更容易一些。

  1. 是你可以设置相同的他们的活动,使它看起来像 的对话框。
  2. 对于两个活动(A &乙)相互沟通,你必须 使用startActivityForResult(Intent intent, int reqCode)方法,其中 开始Activity B from Activity A。当Activity B完成时,您必须将结果 通过setResult(int reqCode, Intent intent)方法传递给Activity A
  3. 对于活动和片段通信,我们必须使用Interface 驱动实现,并且它非常容易与Activites之间的通信 进行比较。详情请参考link
  4. 关于同一活动的两个Fragment可以通过Interface轻松与其他 其他通信。详情请查看以上链接。对于 Tablet UI我们必须使用片段来使实现 可管理和模块化。

为什么我不应该这样做吗?优缺点都有什么?

  1. 如果你坚持活动驱动的开发,然后移植相同 代码库平板电脑是非常困难的。
  2. 如果您使用的片段小 小功能,你的代码将是模块化的。
  3. 双向通信是可能的"Fragment & Activity""Fragment & Fragment via Activity"Activity BActivity A通信Activity B之间
  4. 对于以将 破坏,并将其结果传给Activity A

  5. Activity.startActivityForResult()有它自己的优点。如果你想捕捉通过摄像机图像像那么我们就用Implicit Intent启动相机Activity,一旦捕获图像它setResult(int reqCode, Intent intent)通过URI图像的背面,因此调用活动onActivityResult()被调用,以便它可以检查图像的URI的细节。

+0

'两个相同活动的片段可以很容易地通过接口相互通信.'他们可以通过基础活动相互沟通,但是如果你从活动 - >片段 - >片段因为现在你必须从碎片中去掉实现细节并将它们放到Activity中,导致大量的臃肿代码 – KaliMa

+0

@Kalima:你正在谈论的情况Activity - > Fragment - > Fragment,在这种情况下,第二片段必须被嵌套片段意思是片段1的孩子。你不需要直接从活动传递给第二片段。你应该将事件传递给Fragment 1,然后Fragment1将事件传递给Fragment2。详情请查看以下链接。 http://stackoverflow.com/questions/14831690/inter-fragment-communication-applied-to-nested-fragments –