65

アプリにアラート ダイアログを表示したい。フラグメントを使用しています。これを行うために以下のコードを試しました:

 AlertDialog ad = new AlertDialog.Builder(context)
            .create();
    ad.setCancelable(false);
    ad.setTitle(title);
    ad.setMessage(message);
    ad.setButton(context.getString(R.string.ok_text), new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
        }
    });
ad.show();

しかし、それはクラッシュしていて、logcat のエラーは次のとおりでした:

04-18 15:23:01.770: E/AndroidRuntime(9424): android.view.WindowManager$BadTokenException: ウィンドウを追加できません -- トークン null はアプリケーション用ではありません

インターネットから、クラッシュはコンテキストの問題によるものであることがわかりました。私はコンテキストを次のように与えました

context = this.getActivity().getApplicationContext();

これの何が問題なのかわからない。誰でも私を助けることができますか?

4

9 に答える 9

136

に置き換えcontextますgetActivity()

ダイアログのApplicationContext作成などのタスクには使用しないでください。getActivity()フラグメント内にいるため、代わりに Fragmentsメソッドを呼び出すだけで Activity-Context を取得できます。

于 2012-04-18T10:12:44.330 に答える
16

この質問に関する詳細情報 (フラグメント内の AlertDialog、イベント内で管理):

onClick(View v) や onLongClick(View v) などのイベント内で AlertDialog を呼び出す場合は、使用できます

public boolean onClick(View v) {
    ...
    AlertDialog.Builder alertBuilder = new AlertDialog.Builder(v.getContext());
    ...
}
于 2014-05-24T12:34:35.563 に答える
10

DialogFragment を使用してみてください。Fragments を使用する場合は DialogFragment の方が適しています

于 2012-04-18T10:12:25.760 に答える
0

listView 内のアダプターで使用したため、使用できませんでしgetActivity()た。getActivity()それを機能させるために、フラグメント内のアダプターのインスタンス化でコンテキストに使用しました。

this.adapter = new myAdapter(getActivity(), factory);

後で他のクラス(アダプターのクラス)で使用できgetContext()、機能しました。

于 2014-04-19T08:56:17.253 に答える
-1
                       AlertDialog alert= null;
                        AlertDialog.Builder build= new AlertDialog.Builder(getActivity());
                        build.setTitle("title");
                        build.setItems(stringarrayname, new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // TODO Auto-generated method stub
                            //Toast.makeText(getActivity(), "hi", Toast.LENGTH_SHORT).show();   

                            }
                        });
                        build.create().show();
于 2014-09-23T07:14:07.270 に答える
-1

これを試すか、DialogFragment を使用できます

private void showAlert(final int position) {
        new AlertDialog.Builder(getActivity().getApplicationContext())
                .setTitle("Delete entry")
                .setMessage("Are you sure you want to delete this entry?")
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                      //  deleteSuggestions(position);
                    }
                })
                .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // do nothing
                    }
                })
                .setIcon(android.R.drawable.ic_dialog_alert)
                .show();
    }
于 2017-05-18T11:13:02.843 に答える