将AlertDialog处理到doInBackground中

时间:2014-11-05 12:31:56

标签: android android-asynctask handler android-alertdialog

我正在尝试将AlertDialog拨入AsyncTask。我编写了这段代码并且它有效,但当我在AlertDialog中选择项目,然后调用uiHandler.getLooper().quit();继续代码处理时,AlertDialog会冻结(没有关闭,直到活动结束)但是backgroundUI继续进行。我认为这是因为AlertDialog在无限循环结束之前没有时间执行dismiss()方法。请帮我解决这个问题。我只需要在doInBackground方法中执行此操作。

@Override
protected Void doInBackground(Void... arg0) {
    Looper.prepare();
    final Handler uiHandler = new Handler();
    uiHandler.post(new Runnable() {
        public void run() {
            AlertDialog.Builder chooser = new AlertDialog.Builder(ctx);
            facultyChooser.setTitle("Choose")
                    .setCancelable(false)
                    .setItems(faculties, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int item) {
                            uiHandler.getLooper().quit();
                        }
                    })
                    .create()
                    .show();
        }
    });
    Looper.loop();
}

PS:它不是完整的代码,更容易阅读。

2 个答案:

答案 0 :(得分:0)

你必须在doInBackground(onPreExecute)之前运行你的警报并在它之后解除你的对话(onPostExecute)

答案 1 :(得分:0)

从技术上讲,doInBackground()上的Asyntask方法无法执行与UI相关的任务。您必须使用Asynctask的onPostExecute()/ onPreExecute()来展示AlertDialog

相关问题