2012-09-27 69 views
2

我的應用程序上有一個按鈕,如果用戶點擊它,它將通過調用onResume()來刷新當前頁面,並且onResume()中有很多數據庫操作。而不是保持按鈕保持按下一段時間,我想在加載數據時使用asynctask來創建progressdialog。但問題是按鈕仍然處於按下狀態,進度對話框僅在操作結束時顯示很短的時間。如何使asynctask正常工作

RefreshButton.setOnClickListener(new OnClickListener() 
     { 

      public void onClick(View v) 
      { 
       onResume(); 
      } 
     }); 

protected void onResume() 
    { 
     doneloading = false; 
     monResumeloading = new onResumeloading(); 
     monResumeloading.execute(); 
     ....loading... 

      doneloading = true; 
    } 

private class onResumeloading extends AsyncTask<Integer, Integer, String> 
    { 
     private ProgressDialog progressDialog; 
     @Override 
     protected void onPostExecute(String result) 
     { 
      progressDialog.dismiss(); 
     } 

     @Override 
     protected void onPreExecute() 
     { 
      progressDialog = new ProgressDialog(StatisticsActivity.this); 
      progressDialog.setMessage("Loading..."); 
      progressDialog.setCancelable(true); 
      progressDialog.show(); 

      Log.i(TAG, "    doneloading=false"); 
     } 

     @Override 
     protected void onProgressUpdate(Integer... values) 
     { 

     } 

     @Override 
     protected String doInBackground(Integer... params) 
     { 
      while(!doneloading) 
      { 
       publishProgress(0); //dummy 
          log.i(TAG, "loading"); 
      } 
      return null; 
     } 


    } 

我觀察到的「加載」日誌中顯示的AsyncTask執行後立即停止布爾doneloading爲假之後。但進度對話框工作不正常。請幫我:(

回答

2

的第一件事情,我不認爲你應該在的onResume()函數來調用你的AsyncTask,你可以簡單地從你的ClickListener調用它。

現在,你正在做'.... loading ...'代碼,甚至在執行AsyncTask之前,這就是爲什麼按鈕在執行'.... loading ...'時保持按下狀態,然後當它完成時,它會執行您的AsyncTask,這實際上是「T做任何事情 - 這就是爲什麼它只是顯示了一小段時間

移動你的。」 ......載入中...」代碼到您的AsyncTask的doInBackground(),它應該工作正常

摘要:

  1. 點擊:執行的AsyncTask
  2. 的AsyncTask:打開ProgressDialog
  3. 的AsyncTask:執行你的 '...加載中...' 代碼
  4. 的AsyncTask:等待」 ......加載...'代碼完成,同時仍然顯示對話框。
  5. 的AsyncTask:辭退ProgressDialog
+0

感謝您的時間,發生什麼事,如果我不想將我的代碼了我的onResume()方法? – user1701840

+0

我認爲它應該仍然有效,但它只是一個奇怪的地方。因爲讓我們說你轉到下一個活動,然後點擊返回。它將調用onResume()函數,從而再次執行'... loading ...'和AsyncTask函數。 – dispake

+0

我想我執行asynctask之前..... loading ....代碼 因爲我需要更新用戶界面(用戶界面包含一些圖形和信息)用戶從其他活動回來的一切,所以我把所有那些在onResume裏面的代碼,如果我需要將這些代碼移動到私有的asynctask類中,這將是一件令人頭痛的事情... – user1701840