显示 DialogFragment 时调用 Fragment 未暂停

Posted

技术标签:

【中文标题】显示 DialogFragment 时调用 Fragment 未暂停【英文标题】:Calling Fragment not paused when showing DialogFragment 【发布时间】: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 中没有找到任何关于这种行为的参考,所以参考是一个加号。

【问题讨论】:

【参考方案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() 方法并在其中使用回调侦听器,这将回调父片段。

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

【讨论】:

以上是关于显示 DialogFragment 时调用 Fragment 未暂停的主要内容,如果未能解决你的问题,请参考以下文章

Fragment和DialogFragment生命周期关系

DialogFragment dismiss() 不弹出回栈

android DialogFragment 回调到 Fragment

onActivityResult() 没有在 DialogFragment 中执行

自定义DialogFragment中的Tablayout不显示选项卡文本和图标

如何在 DialogFragment 中显示现有的 ListFragment