Android'无法添加窗口 - 令牌null不适用于应用程序'异常

mic*_*ael 134 android runtimeexception android-dialog android-windowmanager

当我尝试打开对话框时,我收到以下Android异常.有人可以帮我理解发生了什么,我该如何解决这个问题?

android.view.WindowManager$BadTokenException: 
  Unable to add window -- token null is not for an application
    at android.view.ViewRoot.setView(ViewRoot.java:509)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
    at android.app.Dialog.show(Dialog.java:241)
Run Code Online (Sandbox Code Playgroud)

Pet*_*ego 419

我猜 - 您是否正在尝试使用应用程序上下文创建Dialog?像这样的东西:

new Dialog(getApplicationContext());
Run Code Online (Sandbox Code Playgroud)

这是错的.您需要使用Activity上下文.

你必须尝试:

new Dialog(YourActivity.this);
Run Code Online (Sandbox Code Playgroud)

  • 用于创建自定义对话框的android docs(http://developer.android.com/guide/topics/ui/dialogs.html#CustomDialog)出现此错误.Context mContext = getApplicationContext(); 对话框对话框=新对话框(mContext); 你的修复导致Dialog dialog = new Dialog(this); 哪个有效!谢谢 (10认同)
  • 然后mContext应该是MyActivity.this. (9认同)
  • 使用`getActivity()`@SagarDevanga (2认同)

cod*_*zjx 34

您可以继续使用getApplicationContext(),但在使用之前,您应该添加此标志:dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT),并且不会显示错误.

并且不要忘记添加权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
Run Code Online (Sandbox Code Playgroud)

  • 不能在RecyclerAdapter中使用getActivity() (3认同)

Pri*_*shi 12

尝试getParent()在争论的地方contextnew AlertDialog.Builder(getParent());希望它会工作,它为我工作.

  • 当您在另一个不显示Activity类的类中显示任何对话框时,您可能无法获得正在扩展Activity的该类的上下文.因此,要在您的类中获取您尝试显示对话框但不扩展Activity的上下文,您可以使用getParent()返回该上级活动的上下文. (2认同)

pos*_*uKe 12

在我的情况下,我试图像这样创建我的对话框:

new Dialog(getApplicationContext());
Run Code Online (Sandbox Code Playgroud)

所以我不得不改变:

new Dialog(this);
Run Code Online (Sandbox Code Playgroud)

它对我来说很好;)


归档时间:

查看次数:

129950 次

最近记录:

6 年,4 月 前