2013-03-05 47 views
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; 

請問我在使用對話框的方法是壞?

如有任何意見,將不勝感激。

回答

9

你的進度條之間,因爲你是在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...)後在UI線程上調用。

onPostExecute(Result)後臺計算完成後在UI線程上調用。

並開始AsyncTask如下:

new MyTask().execute(); 
+0

給我一個新的方法。謝謝,但我如何實現它?它會是一個內部類還是一個單獨的類?和我的進度對話框是點擊,所以你的意思是我把我的聽衆進入內部類? – user1708134 2013-03-05 03:45:18

+0

看到這對你來說是一種新技術,所以你把它作爲一個內部類,以後你可以學會把它作爲一個單獨的類也 – 2013-03-05 03:48:57

+0

我看到,一個按鈕將觸發進度條,我會依賴於當前選擇了什麼tabhost,因此我將onClickBackground方法中的onClick監聽器放在那裏?我認爲這將是複雜的,如果我這樣做.. – user1708134 2013-03-05 03:53:28

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(); 

    } 

比它onPostExecute( )在doInBackground中的任務完成時調用。我忽略這樣的進度對話框

@Override 
    protected void onPostExecute(BlognoneContent result) { 

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

}