Android - onPause ですべてのダイアログを閉じる方法 質問する

Android - onPause ですべてのダイアログを閉じる方法 質問する

実行時にさまざまなダイアログを表示できるアクティビティがあります。各ダイアログを作成するには onCreateDialog(int id) を使用し、各ダイアログの表示と非表示には showDialog(int id) メソッドと quitDialog(int id) メソッドを使用します。

onPause() が呼び出されると、どのダイアログ (ある場合) が表示されるかわかりません。onPause が呼び出されたときに、すべてのダイアログが閉じられるようにしたいです。すべてのダイアログを閉じるための推奨される方法はありますか? ダイアログごとに、dismissDialog() を呼び出す必要がありますか?

ベストアンサー1

DialogFragment を使用していて、すべてを閉じたい場合は、次を使用できます。

/**
 * Dismiss all DialogFragments added to given FragmentManager and child fragments
 */
public static void dismissAllDialogs(FragmentManager manager) {
    List<Fragment> fragments = manager.getFragments();

    if (fragments == null)
        return;

    for (Fragment fragment : fragments) {
        if (fragment instanceof DialogFragment) {
            DialogFragment dialogFragment = (DialogFragment) fragment;
            dialogFragment.dismissAllowingStateLoss();
        }

        FragmentManager childFragmentManager = fragment.getChildFragmentManager();
        if (childFragmentManager != null)
            dismissAllDialogs(childFragmentManager);
    }
}

Kotlin バージョン:

fun FragmentManager.dismissAllDialogs() {
    fragments.forEach { fragment ->
        (fragment as? DialogFragment)?.dismissAllowingStateLoss()
        fragment.childFragmentManager.dismissAllDialogs()
    }
}

おすすめ記事