1. ホーム
  2. android

[解決済み] DialogFragmentを正しく終了させるには?

2022-07-17 01:29:26

質問

ドキュメントによると dismiss() メソッドから Dialog クラスのメソッドに追加します。

このダイアログを終了させ、画面から削除します。このメソッドは どのスレッドからでも安全に呼び出すことができます。このメソッドをオーバーライドしてはいけないことに注意してください。 の中で実装してください。 onStop() .

私のコードでは、私が行っているのは getDialog().dismiss() を呼び出して却下しています。しかし、私はそれ以外のことは何もしていませんし、あるいは onStop() . だから、私は正確にどのように正しく解除するために質問しています DialogFragment を正しく破棄し、メモリリークなどを回避する方法を教えてください。

どのように解決するのですか?

tl;dr: を閉じる正しい方法は DialogFragment を閉じるには dismiss() を直接DialogFragmentの .


詳細 : その のドキュメントを参照してください。 の状態

ダイアログの制御(表示、非表示、終了のタイミングの決定)は、ダイアログを直接呼び出すのではなく、ここのAPIを通して行われるべきです。

したがって getDialog().dismiss() を呼び出してしまうので dismiss() を呼び出してしまうからです。 . その代わりに dismiss() メソッドを使用します。

public void dismiss()

フラグメントとそのダイアログを終了させます。フラグメントがバックスタックに追加された場合、このエントリを含むまでのすべてのバックスタック状態がポップされます。そうでなければ、フラグメントを削除するために新しいトランザクションがコミットされます。

ご覧のように、これはダイアログを閉じるだけでなく、そのプロセスに関与するフラグメントトランザクションを処理することも行います。

必要なのは onStop を使う必要があるのは、手動でクリーンアップする必要があるリソース (ファイルのクローズ、カーソルのクローズなど) を明示的に作成した場合だけです。その場合でも、私なら onStop よりも、DialogFragmentの onStop である。