【Android】DialogFragmentを使ってみる
Android 3.0以降、ダイアログの表示には、DialogFragment
を使用することが推奨されているようです。
基本的な表示処理は、Fragmentと変わらないみたいなのですが、
使用したことがなかったので試してみました。
DialogFragmentの表示
ダイアログを表示するには、DialogFragment
を継承したクラスを作成して、
各メソッドを継承します。
最低限ダイアログの表示を確認するのであれば、onCreateDialog()
を継承し、
表示したいDIalog
クラスのインスタンスを返却してあげればOKです。
public class MyDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder alert = new AlertDialog.Builder(getActivity()) .setTitle("タイトル") .setMessage("メッセージ") .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dismiss(); } }); return alert.create(); } }
ただし、Fragment
を継承したDialogFragment
は、
Fragment
と同様に再生成時にデフォルトコンストラクタが呼ばれる使用のため、
初期化時は、以下のようにsetArguments()
を使用するのがお作法です。
public static final MyDialogFragment newInstance(int flags) { Bundle args = new Bundle(); args.putInt("flags", flags); MyDialogFragment fragment = new MyDialogFragment(); fragment.setArguments(args); return fragment; }
ハマったところ
DialogFragmet
の表示処理(初期化を含む)をActivityのOnCreate()
に記載していたのですが、
回転処理で異常終了が発生する不具合がありました。
DialogFragmet
の実装クラスがインナークラスとして宣言されている場合、
Publicな標準コンストラクタが呼び出せず例外が発生するようです。
そのためDialogFragmet
は、Publicなクラスとして使用するのが一般的なようです。