【问题标题】:DialogFragment versus an Activity themed as a Dialog?DialogFragment 与以 Dialog 为主题的 Activity?
【发布时间】:2016-04-15 13:19:40
【问题描述】:

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

不过,我也可以使用 Activity 来代替,并给它一个 Dialog 主题,这很方便,因为 Activity 可以相互通信,而 Fragment 不能,这使得通信更容易一些。

我有什么理由不应该这样做吗?有什么好处和坏处?

【问题讨论】:

    标签: android android-fragments android-activity android-theme android-dialogfragment


    【解决方案1】:

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

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

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

    1. 是的,您可以将它们设置为活动,使其看起来像 一个对话框。
    2. 要让两个活动(A 和 B)相互通信,您必须 使用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"
    4. 对于Activity BActivity A 通信Activity B 将 销毁并将其结果传递给Activity A

    5. Activity.startActivityForResult()有自己的优势。就像如果你想通过相机捕捉图像,那么我们使用Implicit Intent 来启动相机Activity,一旦它捕捉到图像,它就会将图像的URI 传递回setResult(int reqCode, Intent intent) 并因此调用活动onActivityResult() 以便它调用可以查看图片的URI详细信息。

    【讨论】:

    • Two Fragment on same activities can easily communicate with each other via Interface. 他们可以通过底层活动相互通信,但是如果你从 Activity -> Fragment -> Fragment 开始,这会变得很混乱,因为现在你必须开始从将碎片放入Activity中,导致大量臃肿的代码
    • @Kalima:您说的是 Activity -> Fragment -> Fragment 的情况,在这种情况下,第二个 Fragment 必须是 Fragment1 的嵌套 Fragment 均值子项。您不需要直接从 Activity 与 2nd Fragment 通信。您应该将事件传递给 Fragment 1,然后 Fragment1 将事件传递给 Fragment2。详情请查看以下链接。 stackoverflow.com/questions/14831690/…
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      • 1970-01-01
      • 2011-12-20
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      相关资源
      最近更新 更多