从一个方法调用时未显示Android AlertDialog,但在同一活动中从另一个方法显示为什么?

问题描述

我正在参加一个活动,并且试图显示一个警报对话框。代码是这样的:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("xx");
        builder.setPositiveButton(R.string.delete,new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int which) {
                built.dismiss();
            }
        });
        builder.setNegativeButton(R.string.giveup,int which) {
                built.dismiss();
            }
        });
        builder.setCancelable(true);
        built = builder.create();
        built.show();

问题是,在活动中的两个不同位置调用了相同的代码,而一个起作用,而另一个则不起作用!我不明白,因为它们实际上是相同的...

此网站中存在类似这样的问题,我尝试了其中的大多数问题。我将参数中的this更改为活动名称,设置了位置,放置了show()方法,等等...我不知道如何进行

我在两个地方都设置了断点。工作顺利。但是当它不显示时,断点将在“ builder.create()”处崩溃。它不会超出此范围(它看不到build.show的下一个断点)。它说“框架不可用”

解决方法

我找到了。只是把它放在这里,以防有人需要。我从这里找到它:Listener method (interface in Service) in my Activity doesn't want to display a simple message

问题是,我从发射器(listener.listener)调用了“不工作”的代码,因此它无法在正确的线程上工作。我们需要它来处理UI线程。当我添加此内容时:

runOnUiThread(new Runnable(){
        public void run(){
           showAlertDialog();
        }
    });

成功了!

相关问答

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