【问题标题】:Handle with AlertDialog into the doInBackground用 AlertDialog 处理到 doInBackground
【发布时间】:2014-11-05 12:31:55
【问题描述】:

我正在尝试将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:为了便于阅读,它不是完整的代码。

【问题讨论】:

    标签: android android-asynctask handler android-alertdialog


    【解决方案1】:

    您必须在 doInBackground (onPreExecute) 之前运行您的警报并在它之后关闭您的对话框 (onPostExecute)

    【讨论】:

    • doInBackground 正在解析数据,取决于调用 AlertDialog 的日期,用户选择选项然后解析继续。在执行后我保存解析数据并在poseExecute方法中关闭AlertDialog没有意义
    【解决方案2】:

    从技术上讲,在 Asyntask 上的 doInBackground() 方法中执行 UI 相关任务是不可行的。您必须使用 Asyntask 的 onPostExecute()/onPreExecute() 来显示 AlertDialog

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 1970-01-01
      • 2018-11-29
      相关资源
      最近更新 更多