android.support.v4.app.DialogFragment を拡張するクラス ActivityExitDialogFragment があります。ActivityExitDialogFragment には、ActivityExitDialogFragment の新しいインスタンスを取得するための onCreateDialog と newInstance の 2 つのメソッドしかありません。どうぞ:
public Dialog onCreateDialog(Bundle savedInstanceState) {
String title = getArguments().getString("title");
Dialog myDialog = new AlertDialog.Builder(getActivity())
.setIcon(R.drawable.ic_launcher)
.setTitle(title)
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Dismiss the dialog.
dismiss();
}
})
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Close the Activity.
getActivity().finish();
}
}).create();
return myDialog;
}
static ActivityExitDialogFragment newInstance(String message) {
ActivityExitDialogFragment dialog = new ActivityExitDialogFragment();
Bundle args = new Bundle();
args.putString("title", message);
dialog.setArguments(args);
return dialog;
}
そして、これがダイアログを表示するために使用されるメソッドです。同じパッケージ内の別のアクティビティにあります。ユーザーが終了ボタンをクリックすると呼び出されます。
public void cancelButton(View v) {
ActivityExitDialogFragment dialog =
ActivityExitDialogFragment.newInstance(exitMessage);
dialog.show(new FragmentActivity().getSupportFragmentManager(),
"Exiting");
}
終了ボタンをクリックするたびに、dialog.show 行で IllegalStateException が発生します。以前にこの問題がありましたが、プロジェクトの libs フォルダーに android-support-v4.jar ファイルがなかったことが原因でした。そのjarファイルをlibsフォルダーに入れたところ、機能しました。クラスの名前を別のものから ActivityExitDialogFragment に変更し、Eclipse で Java ファイルの名前を一致するように変更しました。それ以来、この例外が再び発生しています。名前を変更した後に再び例外が発生したのが偶然なのか、それともパブリッククラスの名前と一致するようにjarファイルの名前を変更するだけでEclipseが何か他のことをしたのかはわかりません。getInstance メソッドのアクセス修飾子を変更し、Android サポート jar ファイルの新しいコピーを削除して追加し、名前を古い名前に戻そうとしましたが、