我正在尝试将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:它不是完整的代码,更容易阅读。
答案 0 :(得分:0)
你必须在doInBackground(onPreExecute)之前运行你的警报并在它之后解除你的对话(onPostExecute)
答案 1 :(得分:0)
从技术上讲,doInBackground()
上的Asyntask
方法无法执行与UI相关的任务。您必须使用Asynctask的onPostExecute(
)/ onPreExecute()
来展示AlertDialog
。