0

好吧,这个越来越令人沮丧了。我已经在此处查看了有关 AsyncTasks 和常规线程中的进度对话框栏的帖子,但没有任何东西可以按照我的意愿工作。

在 AsyncTask 我是这样做的:

@Override
 protected void onPreExecute()
 {
     super.onPreExecute();               
     // initialize the dialog
     progressDialog.setTitle("Please wait...");
     progressDialog.setMessage("Downloading team data...");
     progressDialog.setIndeterminate(true);
     progressDialog.setCancelable(true);
     progressDialog.show();
 }

    @Override
    protected Boolean doInBackground(String... parms) {
    ... stuff

     @Override protected void onPostExecute(Boolean result) {
     progressDialog.dismiss();
  }

当我执行上述操作时,在 doInBackground 作业完成之前我什么也得不到。我读过的笔记说,在 main 中使用 get() 方法会阻塞进度条。

好的。我必须等待任务完成才能继续,所以我在没有 AsyncTask 的情况下写了同样的东西:

公共类 LoadTeamData2 {

    Context mContext;
    String teamName = "";
    Boolean result;
    String dataload = "";
    ProgressDialog progressDialog;

    public LoadTeamData2(Context mContext, String team) {
    this.mContext = mContext;
    teamName = team;
    }

    public Boolean LoadData () {

         ProgressDialog progressDialog = new ProgressDialog(mContext);
         progressDialog.setTitle("Please wait...");
         progressDialog.setMessage("Downloading team data...");
         progressDialog.setIndeterminate(true);
         progressDialog.setCancelable(true);
      //   progressDialog.show();
         ProgressDialog.show(mContext, "Title", "Message", true, true);

            ... more stuff

         progressDialog.dismiss();
             return true;
            }

从上面我得到了进度对话框栏的最简短的闪光。

我什至从调用的过程中取出了进度对话框栏,并将 show() 和 dismiss() 方法放在对 DoStuff 的调用的两侧。依然没有。

我的智慧到此为止。有任何想法吗?谢谢!

4

2 回答 2

2

您可以ProgressDialog在开始执行之前启动AsyncTask,例如:

gpsProgress = ProgressDialog.show(this, "Searching...", "Getting...", true, true, new DialogInterface.OnCancelListener() {
    public void onCancel(DialogInterface dialog) {

    }
});

(new SampleAsyncTask(this)).execute(param..);

onPostExecute(Result)可以关闭对话框。

请注意,DialogBox 显示不在 中preExecute(),而是在启动AsyncTask.

于 2013-03-01T18:25:57.120 回答
0

调用 asyncTask.get(XX,XX) 阻塞 UIThread,

我的解决方案是将 UIlogic 放在 onPostExecute() 方法中,删除 asyncTask.get(XX,XX)

于 2014-10-24T08:20:18.630 回答