显示 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 未暂停的主要内容,如果未能解决你的问题,请参考以下文章
DialogFragment dismiss() 不弹出回栈
android DialogFragment 回调到 Fragment
onActivityResult() 没有在 DialogFragment 中执行