如何在片段中显示AlertDialog?

and*_*irl 55 android fragment android-context android-alertdialog

我想在我的应用程序中显示警告对话框.我正在使用片段.我尝试了以下代码来执行此操作:

 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();
Run Code Online (Sandbox Code Playgroud)

但它崩溃了,logcat中的错误是:

04-18 15:23:01.770:E/AndroidRuntime(9424):android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null不适用于应用程序

从互联网上我开始知道崩溃是由于上下文问题.我给了上下文

context = this.getActivity().getApplicationContext();
Run Code Online (Sandbox Code Playgroud)

我不知道这有什么问题.有谁能够帮我?

Jav*_*ave 125

替换contextgetActivity().

ApplicationContext不应该用于任务,如创建对话框.当您在片段中时,您只需通过调用Fragments getActivity()方法即可获得Activity-Context .

  • 如果getActivity()为null,该怎么办? (2认同)
  • @SujithPt当`getActivity()`返回null时,表示该片段未附加到活动,您不应显示任何对话框. (2认同)

JDC*_*der 14

有关此问题的更多信息(片段中的AlertDialog,在事件内部管理):

如果您在onClick(View v)或onLongClick(View v)等事件中调用AlertDialog,则可以使用

public boolean onClick(View v) {
    ...
    AlertDialog.Builder alertBuilder = new AlertDialog.Builder(v.getContext());
    ...
}
Run Code Online (Sandbox Code Playgroud)


FUB*_*BUs 10

尝试使用DialogFragment,使用Fragments时DialogFragment会更好