0

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 ファイルの新しいコピーを削除して追加し、名前を古い名前に戻そうとしましたが、

4

1 に答える 1

0

newを使用してアクティビティを直接インスタンス化しようとしないでください。代わりに、実行しているアクティビティからフラグメントマネージャーを直接取得します。

dialog.show(getSupportFragmentManager(),               
"Exiting");
于 2012-06-10T16:58:14.157 に答える