Android Fragments 显示DialogFragment时调用Fragment未暂停

s3fp2yjn  于 2023-08-06  发布在  Android
关注(0)|答案(3)|浏览(154)

在我的应用程序的一个部分中,我向用户显示了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时,我希望调用调用片段的onResume()方法,但它没有。
那么DialogFragments有什么特别之处呢?为什么对话框显示时调用片段没有暂停?如何实现呢?
我在文档中没有找到任何关于这种行为的引用,所以引用是一个加号。

vwhgwdsa

vwhgwdsa1#

这可以帮助您:链接
事实上,FragmentDialog本身并不是一个Activity,而是包含调用片段的同一Activity的一部分。这意味着当显示dialogFragment时片段没有暂停。
引用我给你的源代码,一个片段在以下情况下暂停:另一个Activity位于前台并具有焦点,但该片段所在的Activity仍然可见(前台Activity部分透明或未覆盖整个屏幕)。
希望能帮上忙

4zcjmb1e

4zcjmb1e2#

处理此问题的一种方法是将您的DialogFragment嵌入到Activity中,并将Activity显示为Dialog,以下链接中有一个技巧说明了如何操作:
http://developer.android.com/guide/topics/ui/dialogs.html
您可以使用它来更新底层的Fragment,因为当Dialog(它是一个Activity)完成时,将在底层的Fragment上调用onResume()。在onResume()方法中添加代码来更新片段的状态,这就是它的全部内容。
另一种方法是可以覆盖OnDismiss()方法并在其中使用回调侦听器,该侦听器将回调父片段。
以上是我这边的建议,希望能得到任何线索.

kyxcudwk

kyxcudwk3#

打开DialogFragmentBottomSheetDialogFragment时,调用片段的onPauseonResume方法不会被调用。
要处理这个问题,你可以使用FragmentLifecycleCallbacks

1-创建FragmentLifecycleCallbacks(inner)类:

// Create a FragmentLifecycleCallbacks (inner) class:
    inner class ChildFragmentCallbacks : FragmentManager.FragmentLifecycleCallbacks() {
        override fun onFragmentResumed(fm: FragmentManager, f: Fragment) {
            super.onFragmentResumed(fm, f)
            // dialogFragments/bottomsheetfragments oppend
        }

        override fun onFragmentPaused(fm: FragmentManager, f: Fragment) {
            super.onFragmentPaused(fm, f)
            // dialogFragments/bottomsheetfragments closed
        }
    }

字符串

2-在onCreate()上注册:

childFragmentManager.registerFragmentLifecycleCallbacks(ChildFragmentCallbacks(), false)


总代码:

import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager

class YourParentFragment : Fragment() {

    // ...

    // Create a FragmentLifecycleCallbacks (inner) class:
    inner class ChildFragmentCallbacks : FragmentManager.FragmentLifecycleCallbacks() {
        override fun onFragmentResumed(fm: FragmentManager, f: Fragment) {
            super.onFragmentResumed(fm, f)
            // dialogFragments/bottomsheetfragments oppend
        }

        override fun onFragmentPaused(fm: FragmentManager, f: Fragment) {
            super.onFragmentPaused(fm, f)
            // dialogFragments/bottomsheetfragments closed
        }
    }

    // Register it on onCreate():
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        childFragmentManager.registerFragmentLifecycleCallbacks(ChildFragmentCallbacks(), false)
    }

    // ...

}

相关问题