【问题标题】:Calling Fragment not paused when showing DialogFragment显示 DialogFragment 时调用 Fragment 未暂停
【发布时间】:2015-12-14 04:41:05
【问题描述】:

在我的应用程序的一部分中,我向用户展示了一个 ListView。当用户按下列表中的项目时,会显示DialogFragment

@Override
public void onClick() {
    android.support.v4.app.FragmentTransaction ft = getFragment().getFragmentManager().beginTransaction();
    ft.addToBackStack(null);
    SingleSettingDialogFragment dialog = SingleSettingDialogFragment.newInstance(...);
    dialog.show(ft, "Single");
}

DialogFragment 的结构如下:

@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {
    super.onCreateDialog(savedInstanceSate);
    AlertDialog dialog =  new AlertDialog.Builder(...)
        ...
        .create();
    ...
    return dialog;
}

当用户退出DialogFragment时,我希望调用Fragment的onResume()方法被调用,但事实并非如此。

那么 DialogFragments 有什么特别之处呢?为什么显示 Dialog 时调用 Fragment 没有暂停?以及如何实现?

我在 Docs 中没有找到任何关于这种行为的参考,所以参考是一个加号。

【问题讨论】:

    标签: android android-fragments android-dialogfragment onpause


    【解决方案1】:

    这可能会对您有所帮助:link

    事实上,FragmentDialog 本身并不是一个活动,而是包含调用片段的同一活动的一部分。 这意味着在显示dialogFragment时片段没有暂停。

    引用我给你的来源,片段在以下情况下暂停:另一个活动在前台并具有焦点,但该片段所在的活动仍然可见(前台活动部分透明或不覆盖整个屏幕)。

    希望有帮助

    【讨论】:

    • 这不是我真正要问的。我知道 DialogFragment 本身不是一个活动,我不希望我的活动收到暂停事件。我希望在显示 DialogFragment 时暂停请求 DialogFragment 的片段。就像显示任何其他片段一样。
    • 文字的意思是,只有在activity暂停时,fragment才会暂停。由同一活动托管的两个片段(例如在您的情况下)可以一个存在于另一个之上,并且都处于活动状态。这就是你的片段没有暂停的原因。
    【解决方案2】:

    解决此问题的一种方法是将您的 DialogFragment 嵌入 Activity 并将 Activity 显示为 Dialog,以下链接中有一个提示,说明了如何:

    http://developer.android.com/guide/topics/ui/dialogs.html

    您可以使用它来更新底层 Fragment,因为当 Dialog(它是一个 Activity)完成时,将在底层 Fragment 上调用 onResume()。在 onResume() 方法中添加代码以更新片段的状态,仅此而已。

    其他方法是您可以覆盖 OnDismiss() 方法并在其中使用回调侦听器,这将回调父片段。

    这些是我这边的建议,希望它会得到任何线索。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 2014-10-11
      • 2015-09-26
      • 2017-03-02
      相关资源
      最近更新 更多