71

Androidアプリを開発するとき、アラートと確認を表示するためにDialogFragment直接使用するのではなく、使用することをお勧めすることを読みました。AlertDialog

これは、たとえば、DialogFragmentのドキュメントで行われます:http://developer.android.com/reference/android/app/DialogFragment.html

人々はまた、ここでこれを好むと言います: Android DialogFragment vs Dialog

コードがより複雑になるので、このアプローチの利点を知りたいです。

ありがとう

4

2 に答える 2

67

これは簡単。
DialogFragmentはフラグメントです。では、他のオブジェクトが提供できないのに、フラグメントは何を提供できるのでしょうか。
これはライフサイクルコールバックです。
したがって、DialogFragmentを使用すると、非常に強力になり、コードがはるかにクリーンになります。
アクティビティが破棄されているときにダイアログを閉じなかった場合にウィンドウリークが発生するのを見たことがありますか?それを防ぐために、onPause()が呼び出されたときにダイアログを閉じようとしたことがありますか?そのために、そのダイアログをクラスレベルのオブジェクトに参照する必要があったことはありますか?
DialogFragmentを使用すると、すべてが処理されます。
そして、すべてのライフサイクルコールバックを取得します。
次に、ダイアログにより多くのインテリジェンスを提供し、アクティビティが何をすべきかを指示するのではなく、ダイアログにそれ自体でスマートな作業を行わせることができます。

于 2016-02-04T23:07:09.500 に答える
62

DialogよりもDialogFragmentを使用します。


  • APIレベル13の導入以降

    ActivityのshowDialogメソッドは非推奨になりました。ダイアログを自分で管理する必要があるため(方向の変更など)、コードの他の場所でダイアログを呼び出すことはお勧めできません。showDialogを使用しないと、時折例外が発生し、ダイアログはどのアクティビティにもリンクされません。

    showDialogに関する注意:

    ダイアログの参照:アクティビティは、ダイアログの作成、保存、および復元を管理する機能を提供します。onCreateDialog(int)、onPrepareDialog(int、Dialog)、showDialog(int)、およびdismissDialog(int)を参照してください。これらのメソッドを使用すると、getOwnerActivity()はこのダイアログを管理したアクティビティを返します。

  • DialogFragmentとAlertDialogの違い

    あなたの質問を読むときに頭に浮かぶ1つのこと。彼らはそんなに違うのですか?DialogFragmentはDialogに非常によく似ており、フラグメント内にラップされているだけです。DialogFragmentに関するAndroidリファレンスから:

    DialogFragmentは、アクティビティのウィンドウの上に浮かぶダイアログウィンドウを表示するフラグメントです。このフラグメントにはDialogオブジェクトが含まれており、フラグメントの状態に基づいて適切に表示されます。ダイアログの制御(表示、非表示、非表示のタイミングの決定)は、ダイアログを直接呼び出すのではなく、ここのAPIを介して行う必要があります。

  • その他の注意事項

    • フラグメントは、画面サイズが異なるデバイスが多様であるため、Androidフレームワークの自然な進化です。
    • DialogFragmentsとFragmentsは、サポートライブラリで利用できるようになり、現在使用されているすべてのバージョンのAndroidでクラスを使用できるようになります。
于 2012-12-07T14:49:04.057 に答える