Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AlertDialog未显示,但为模态_Android_Android Alertdialog - Fatal编程技术网

Android AlertDialog未显示,但为模态

Android AlertDialog未显示,但为模态,android,android-alertdialog,Android,Android Alertdialog,有一个活动,该活动有一个名为method的事件,该事件在按下Enter或点击屏幕上的按钮时被调用。在这种情况下,如果满足某些条件,我将构建一个警报对话框 public void process() { .... final AlertDialog.Builder adb = new AlertDialog.Builder(this); adb.setTitle(getString(R.string.alert_title)); adb.setMessage(get

有一个
活动
,该活动有一个名为method的事件,该事件在按下Enter或点击屏幕上的按钮时被调用。在这种情况下,如果满足某些条件,我将构建一个
警报对话框

public void process() {
    ....
    final AlertDialog.Builder adb = new AlertDialog.Builder(this);
    adb.setTitle(getString(R.string.alert_title));
    adb.setMessage(getString(R.string.alert_question));
    adb.setCancelable(false);
    adb.setPositiveButton(getString(R.string.alert_answer_ok), new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            ....
        }
    });
    adb.setNegativeButton(getString(R.string.alert_answer_no), new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            ....
        }
    });
    adb.show();
    ....
}
但是,在emulator中运行时,当事件触发时,
AlertDialog
不会显示:
它会阻止
活动
,就像上面有一个模式对话框一样,但对话框本身不可见

这是什么原因造成的?如何正确显示对话框

编辑 也尝试过此方法,但仍然无效:

adb.create().show();
从create()获取AlertDialog


查看谷歌文档

与此同时,我发现了它

问题不在于对话框的构建,而在于我的方法并没有随着对话框的显示而结束。
但是,由于该方法是在UI线程中调用的,所以直到该方法结束时,对话框才被绘制出来

所以我只是把代码放在对话框后面,放到一个单独的方法中,在显示对话框的条件的else情况下调用它,也在对话框按钮的侦听器中调用它


无论如何,谢谢你的帮助。

你说的不清楚。
活动被阻塞,不响应点击,甚至不响应硬件后退按钮,但对话框不可见。我相信你传递了错误的上下文,请尝试“ClassName.this”而不仅仅是“this”,您需要UI线程上下文,通常MainActivity
*活动相同。在本例中,此
。我也试过了。但是没有任何改变。。。还尝试了
getActivity()
…当调用方法
process
时?什么是线程?我看不出有什么区别。你需要用builder.create()创建它;希望它能解决问题m
AlertDialog.Builder.show()
正在创建它,请参见:是的,我看到了。您是对的,但在此之前,您需要创建对话框,然后才能使用show()方法。不太明白:在创建对话框之前,我“需要创建对话框”?
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

builder.setMessage(R.string.dialog_message)
       .setTitle(R.string.dialog_title);
AlertDialog dialog = builder.create();