DialogFragment
は、ダイアログの作成とホスティングのために設計された特殊なフラグメント サブクラスです。1 対 1 やグループの会話に
フラグメント内でダイアログをホストする場合、
FragmentManager
状態を管理する
構成の変更に応じてダイアログを自動的に復元できます。
発生します。
DialogFragment の作成
DialogFragment
を作成するには、次を拡張するクラスを作成します。
DialogFragment
および
オーバーライド
onCreateDialog()
,
必要があります。
Kotlin
class PurchaseConfirmationDialogFragment : DialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = AlertDialog.Builder(requireContext()) .setMessage(getString(R.string.order_confirmation)) .setPositiveButton(getString(R.string.ok)) { _,_ -> } .create() companion object { const val TAG = "PurchaseConfirmationDialog" } }
Java
public class PurchaseConfirmationDialogFragment extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { return new AlertDialog.Builder(requireContext()) .setMessage(getString(R.string.order_confirmation)) .setPositiveButton(getString(R.string.ok), (dialog, which) -> {} ) .create(); } public static String TAG = "PurchaseConfirmationDialog"; }
同様の方法で
onCreateView()
通常のフラグメント onCreateDialog()
内にルート View
を作成します。
表示する Dialog
を作成します。
これは DialogFragment
の一部です。DialogFragment
は、フラグメントのライフサイクル内で Dialog
を適切な状態で表示するよう処理します。
onCreateView()
と同様に、Dialog
の任意のサブクラスを返すことができます。
使用制限はなく、onCreateDialog()
から
AlertDialog
。
DialogFragment を表示する
手動で FragmentTransaction
を作成する必要は、
DialogFragment
を表示します。代わりに、show()
メソッドを使用してダイアログを表示します。FragmentManager
への参照を渡すことができます。
そして String
を FragmentTransaction
タグとして使用します。
作成時
Fragment
内から DialogFragment
を使用する場合は、フラグメントの
状態を適切に復元できるように、子 FragmentManager
を
構成変更後に管理できます。null 以外のタグを使用すると、
findFragmentByTag()
: 後で DialogFragment
を取得します。
Kotlin
// From another Fragment or Activity where you wish to show this // PurchaseConfirmationDialogFragment. PurchaseConfirmationDialogFragment().show( childFragmentManager, PurchaseConfirmationDialog.TAG)
Java
// From another Fragment or Activity where you wish to show this // PurchaseConfirmationDialogFragment. new PurchaseConfirmationDialogFragment().show( getChildFragmentManager(), PurchaseConfirmationDialog.TAG);
FragmentTransaction
の管理を強化するには、既存の FragmentTransaction
を受け入れる show()
オーバーロードを使用します。
DialogFragment ライフサイクル
DialogFragment
は、標準のフラグメントのライフサイクルに従います。
ライフサイクル コールバックをいくつか追加します。一般的なライフサイクル コールバックは次のとおりです。
onCreateDialog()
: このコールバックをオーバーライドして、フラグメントが参照するDialog
を提供します。 表示できます。onDismiss()
: このコールバックをオーバーライドして、必要に応じて リソースの解放や登録解除など、Dialog
が閉じられました 制限します。onCancel()
: 呼び出しの際にカスタム ロジックを実行する必要がある場合は、このコールバックをDialog
がキャンセルされました。
DialogFragment
には、キャンセル可能性を拒否または設定するメソッドも含まれています。
DialogFragment
:
dismiss()
: フラグメントとそのダイアログを閉じます。フラグメントが このエントリまでのバックスタックの状態がすべてポップされます。 それ以外の場合、フラグメントを削除するための新しいトランザクションが commit されます。setCancelable()
: 表示されているDialog
をキャンセル可能にするかどうかを制御します。この方法を使用 直接呼び出すのではなくDialog.setCancelable(boolean)
。
オーバーライドしない
onCreateView()
または
onViewCreated()
Dialog
で DialogFragment
を使用する場合。ダイアログは単なる
それぞれに独自のウィンドウがあります。そのため、特定のルールをオーバーライドするだけでは
onCreateView()
。また、onCreateView()
をオーバーライドして非 null のビューを指定しない限り、カスタム DialogFragment
で onViewCreated()
が呼び出されることはありません。
カスタムビューを使用する
DialogFragment
を作成し、オーバーライドすることでダイアログを表示できます。
onCreateView()
。
通常のフラグメントと同様に、layoutId
を指定するか、
DialogFragment
コンストラクタ。
onCreateView()
から返される View
自動的にダイアログに追加されます。つまり、ほとんどの場合、デフォルトの空のダイアログにビューが入力されるため、onCreateDialog()
をオーバーライドする必要はありません。
DialogFragment
の特定のサブクラス(BottomSheetDialogFragment
など)は、ボトムシートとしてスタイル設定されたビューをダイアログに埋め込みます。