アプリに警告ダイアログを表示したい。フラグメントを使用しています。私はこれを行うために以下のコードを試しました:
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 18:23:01.770:E/AndroidRuntime(9424):Android.view.WindowManager $ BadTokenException:ウィンドウを追加できません-トークンnullはアプリケーション用ではありません
インターネットから、クラッシュはコンテキストの問題が原因であることがわかりました。私はコンテキストを
context = this.getActivity().getApplicationContext();
私はこれの何が問題なのか分かりません。誰も私を助けることができますか?
context
をgetActivity()
に置き換えます。
ApplicationContext
は、ダイアログの作成などのタスクには使用しないでください。フラグメントにいるので、代わりにFragments getActivity()
メソッドを呼び出すだけでActivity-Contextを取得できます。
この質問に関する詳細情報(フラグメント内のアラートダイアログ、イベント内で管理):
OnClick(View v)やonLongClick(View v)などのイベント内でAlertDialogを呼び出すと、次を使用できます。
public boolean onClick(View v) {
...
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(v.getContext());
...
}
DialogFragmentを使用してみてください。フラグメントを使用すると、DialogFragmentの方が優れています
フラグメントからAlertDialogを作成しようとしていたのと同様の問題がありました。それからNullPointerExceptionが発生しました。最初は次のようにしました。
_AlertDialog alertDialog = new AlertDialog.Builder(getActivity()).create();
_
NullPointerException
は、コードの後半でalertDialog.show()
を呼び出すときに特に発生しました。しかし、ドキュメントでAlertDialog.Builder()
を検索した後、それを初期化する別の方法があるように見えました [AlertDialog.Builder Doc]
_AlertDialog alertDialog = new AlertDialog.Builder(getActivity(), R.style.Theme_AppCompat_Dialog_Alert).create();
_
これにより、手元のNullPointerException
が解決されました。これがあなたにも役立つことを願っています!
ListView内のアダプターで使用したため、getActivity()
を使用できませんでした。動作させるために、フラグメント内のアダプターのインスタンス化のコンテキストにgetActivity()
を使用しました。
_this.adapter = new myAdapter(getActivity(), factory);
_
後で他のクラス(アダプターのクラス)でgetContext()
を使用することができ、機能しました。