【问题标题】:DialogFragment advantages over AlertDialog [duplicate]DialogFragment 优于 AlertDialog [重复]
【发布时间】:2012-11-25 18:02:36
【问题描述】:

在开发 Android 应用时,我读到建议使用 DialogFragment 而不是直接使用 AlertDialog 来显示警报和确认。

这是在例如 DialogFragment 的文档中完成的:http://developer.android.com/reference/android/app/DialogFragment.html

人们还说他们更喜欢这里: Android DialogFragment vs Dialog

我想知道这种方法的优点,因为代码变得更加复杂。

谢谢

【问题讨论】:

  • 我认为除非有特定要求,否则您不应该使用对话框片段,它的编写时间很长,您已经在 alertdialog 中创建了一个视图,您可以根据需要自定义布局,无需调用 showDialog ()、onPrepareDialog() 和 onCreateDialog。
  • 健壮的代码比更短的代码更重要

标签: android android-alertdialog android-dialogfragment dialogfragment


【解决方案1】:

这很简单。
DialogFragment 是一个片段。 那么片段可以为您提供什么,而其他对象却不能呢?
这是生命周期回调。
因此,使用 DialogFragment,它可以非常强大,并使您的代码更加简洁。
如果您在 Activity 被销毁时没有关闭对话框,您是否见过窗口泄漏?所以为了防止这种情况,你有没有试过在 onPause() 被调用时关闭对话框?因此,要做到这一点,您是否必须将该对话框引用到类级别对象?
有了 DialogFragment,一切都搞定了。
你会得到所有生命周期回调。
然后你可以为对话框提供更多的智能,让它自己做一些聪明的工作,而不是 Activity 告诉它做什么。

【讨论】:

    【解决方案2】:

    在 Dialog 上使用 DialogFragment:


    • 自从引入 API 级别 13

      Activity 中的showDialog 方法已弃用。 不建议在代码的其他地方调用对话框,因为您必须自己管理对话框(例如方向更改)。不使用 showDialog 会导致偶尔的异常,对话框没有链接到任何 Activity。

      关于showDialog的注意事项:

      对话框的参考:活动提供了一种工具来管理对话框的创建、保存和恢复。请参见 onCreateDialog(int)、onPrepareDialog(int, Dialog)、showDialog(int) 和dismissDialog(int)。如果使用这些方法,getOwnerActivity() 将返回管理此对话框的 Activity。

    • DialogFragment 和 AlertDialog 的区别

      阅读您的问题时想到的一件事。他们有那么大的不同吗? DialogFragment 与 Dialog 非常相似,只是包裹在一个片段中。来自有关 DialogFragment 的 Android 参考:

      DialogFragment 是一个显示对话窗口的片段,浮动在其顶部 活动的窗口。这个片段包含一个 Dialog 对象,它 根据片段的状态适当显示。的控制 应该完成对话框(决定何时显示、隐藏、关闭它) 通过 API here,而不是直接调用对话框。

    • 其他说明

      • 由于具有不同屏幕尺寸的设备的多样性,片段是 Android 框架中的自然演变。
      • DialogFragments 和 Fragments 在支持库中可用,这使得该类可用于所有当前使用的 Android 版本。

    【讨论】:

    • 但是如果没有 showDialog,我们也可以通过在 alertDialog 中设置视图来显示对话框,我认为这很容易,我们需要更少的代码并且清晰。
    • 方向改变时如何清晰?
    • 好的,这是您的要求,请注意,使用不带 showDialog 的对话框会导致开发者控制台中偶尔出现异常报告。 (不由活动管理)
    • 未附加到窗口的 IllegalStateException 视图是对话框抛出的典型异常。
    • IMO,答案的主要部分“没有区别/它们非常相似”并没有真正回答问题的标题“优势超过”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    相关资源
    最近更新 更多