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...)の呼び出し後にUIスレッドで呼び出されます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 に答える