警示对话框未显示

12

大家好,我正在创建一个在Android中通过点击按钮触发的警报对话框。我使用了XML文件的onClick属性来调用函数。下面是我的代码:

public void selectPhoneType(View view)
{
    String [] item = {"Home", "Work", "Mobile", "Work Fax", "Home Fax", "Pager", "Other", "Custom"};
    AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
    builder.setTitle("Select Label");
    AlertDialog alert = builder.create();
    alert.show();}

但是这段代码没有显示警报,而是出现了错误,如下所示:

BadTokenException: Unable to add window -- token null is not for an application. 

请告诉我这段代码的问题在哪里。


2
尝试:new AlertDialog.Builder(this) - anfy2002us
1
嘿,谢谢,它起作用了,但你能解释一下这个和getAplicationContext之间的区别吗? - Lalit Chattar
4个回答

25
new AlertDialog.Builder(getApplicationContext());

我认为这就是问题所在。你尝试过以下方法吗:

new AlertDialog.Builder(YourActivityClassName.this);

1
是的,我没有尝试过这个,但在做了这个之后它可以工作了。怎么做的?请给我解释一下。 - Lalit Chattar
1
你添加的是整个应用程序的上下文,而不是你想要显示对话框的特定活动。在这篇博客文章的底部有更详细的解释。http://tech.shantanugoel.com/2010/07/08/badtokenexception-android-dialog-getapplicationcontext.html - NotACleverMan
没问题。很高兴能提供帮助。 - NotACleverMan
希望有另一个勾选按钮,这样我也可以使用它。是最好的解决方案之一。 :) - Faisal Qayyum

1
传递 requireActivity()而不是requireContext()对我有用...!! 我认为它需要活动上下文!!。

0

如果您在后台线程中调用对话框代码,则不会起作用。 如果您没有在主线程中调用与UI相关的代码,则不会显示对话框。

  1. 如果您想在后台任务中显示对话框,请改用Handler。

    new Handler().post(new Runnable(){ showDialog(); })

  2. 确保已调用create()show()方法。

  3. 永远不要忘记第一点和第二点。


0
在我的情况下,将 androidx.appcompat.app.AlertDialog 替换为 android.app.AlertDialog 对我有帮助。
val builder = android.app.AlertDialog.Builder(requireActivity())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接