2

我试图在进程运行时显示一个进度对话框,然后在进程完成后关闭。但是在该过程完成之前对话框会冻结。我需要在我的代码中添加什么?

这是我的代码:

final ProgressDialog dialog = ProgressDialog.show(this, "","Loading..Wait.." , true);
        switch (th.getCurrentTab()) {
        case 0:
            dialog.show();
            Handler menHanlder = new Handler();
            menHanlder.postDelayed(new Runnable() {
                public void run() {
                    for(int i = 0; i < menLV.getCount(); i++)
                    {
                        if(menBooleanArray.get(i) == true) 
                        {
                            selectedFromMenList.add(menLV.getItemAtPosition(i).toString());
                        }
                    }
                    handler.setItemListData(WardrobeActivity.this, "Wardrobe", selectedFromMenList, "Name" , "Men" , "Type");
                    displayView();
                    drawer.closeMenu();
                    refreshTabWidget();
                    selectedFromMenList.clear();
                    dialog.dismiss();
                }   
            }, 3000);
            break;

我使用对话框的方法是否不好?

任何评论将不胜感激。

4

2 回答 2

10

您的进度条在两者之间冻结,因为您正在处理 UI 线程上的繁重任务,而在 Android 中,您不应该在 UI 线程上处理繁重的任务,而是可以AsyncTask按如下方式用于此目的:

public class MyTask extends AsyncTask<Void, Integer, Void>{


 @Override
      protected void onPreExecute() {
//Show progress Dialog here

      }


@Override
      protected void onPostExecute(Voidresult) {
           //Update UI here if needed
//Dismiss Progress Dialog here
      }

 @Override
      protected String doInBackground(Void... params) {
            //Do you heavy task here

      }      

}

AsyncTask 经历了 4 个步骤

onPreExecute()任务执行后立即在 UI 线程上调用。

doInBackground(Param ...)执行完成后立即在后台线程上调用onPreExecute()

onProgressUpdate(Progress...)在调用publishProgress(Progress...).

onPostExecute(Result)在后台计算完成后在 UI 线程上调用。

并开始AsyncTask如下:

 new MyTask().execute();
于 2013-03-05T03:31:27.160 回答
0

这是我的实现

在 Asynctask onPreExecute() 我显示这样的进度对话框

@Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog = new ProgressDialog(ContentActivity.this);
        progressDialog.getWindow().clearFlags(
                WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        progressDialog.setMessage("Loading...");
        progressDialog.setCanceledOnTouchOutside(false);
        progressDialog.show();

    }

当您在 doInBackground 中的任务完成时,它会调用 onPostExecute() 。我像这样关闭进度对话框

@Override
    protected void onPostExecute(BlognoneContent result) {

        super.onPostExecute(result);
        ..............
            if (progressDialog.isShowing()) {
                progressDialog.dismiss();
            }
            .............

}
于 2013-03-05T14:45:24.053 回答