Android Studio:“警告”对话框从菜单调用时会导致崩溃,但从按钮调用时不会崩溃我究竟做错了什么?

问题描述

我有一个显示AlertDialog的方法

public void showTestDialog() {
    new AlertDialog.Builder(this)
            .setMessage("Message")
            .show();
}

它本来要复杂得多,带有标题,正,负按钮,每个按钮调用更多代码,等等。这简直是我所能获取的,但仍然会导致崩溃。

当我按下按钮调用它时,效果很好...

public void testButton(View view) {
    showTestDialog();
}

但是当我从菜单项单击中调用它时,它在显示...后几秒钟便崩溃了。

@Override
public boolean onoptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.testDialog:
            showTestDialog();
            return true;
        default:
            return false;
    }
}

在我的控制台/日志窗口中,这是我单击菜单项时出现的行:

D / Openglrenderer:0x9fa61c80(MenuPopupWindow $ Menudropdownlistview)上的endAllActiveAnimators,其句柄为0x92d16a80

...然后这是虚拟设备突然关闭时出现的唯一行:

设备仿真器-5554已断开连接,监视已停止。

这是崩溃报告窗口:

enter image description here

我已经为我的GPU(GTX 1070)安装了最新的驱动程序,但是仍然可以通过全新下载重新安装,但是没有任何问题。 我在这里已经好几个小时了,没有运气。我做错了什么?我对此很陌生。谢谢!

解决方法

使用静态上下文创建对话框,例如 new AlertDialog.Builder(mContext).setMessage("Message").show();此mContext在oncreate方法中分配上下文。

,

在onCreate中定义AlertDialog实例,然后在单击菜单按钮时显示对话框。您也不需要其他方法来显示对话框。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...