2011-09-19 161 views
0

其實我在使用進度對話框時遇到了一個問題。問題不在於進度對話框。我發現困難的是。進度對話框問題

我叫activty的功能的onPause()說

public void onPause() 
{ 
    super.onPause(); 
    setData(); 
} 

現在onBackpressed()方法我顯示progressdialog和代碼,我使用的是

public void onBackPressed() 
{   
    final ProgressDialog progressDialog = ProgressDialog.show(this, "", "Loading. Please wait...", true); 
    Thread reminderThread = new Thread() 
    { 
     public void run() 
     { 
      try 
      { 
       Thread.sleep(3 * 1000); 
       ReminderForm.this.finish(); 
       progressDialog.dismiss();       
      } 
      catch (InterruptedException e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    };reminderThread.start(); 
} 

現在我的問題是當我在onPause()方法中輸入數據並調用setData()時,需要時間從該活動退出。因此,在那段時間內,當用戶單擊後退按鈕時,顯示進度條。這些工作正常,但當用戶輸入沒有數據,然後我想要進度條顯示,但用更少的時間如用戶輸入數據並調用onPause()方法的setData()方法時所示。但在我的情況下,用戶是否輸入數據,progressBar將需要3秒。所以有什麼辦法可以讓我獲得第一個線程,並把時間放在我的第二個線程中。

+0

我很困惑,爲什麼你想這樣做。 ProgressDialogs只在應用程序正在進行時顯示,用戶必須等待才能繼續。從顯示對話框開始解散它,你只是睡三秒鐘。換句話說,工作可以在1/2秒內完成,但用戶仍然等待2 1/2秒。 – DeeV

+0

正在做什麼?功能..不是你現在擁有的問題。 – Ronnie

+0

實際上,當我通過輸入數據調用該函數的暫停方法,然後它需要時間退出該活動。但是,當我輸入什麼都比它快退出。所以我想顯示一個進度對話框,當它需要時間退出 – AndroidDev

回答

1

Handler.postDelayed方法將在這種情況下成爲你的朋友。 Handler.postDelayed不會產生新線程並執行代碼來執行延遲,而是允許您設置等待並傳入Runnable以在UI線程上執行的時間量。

http://developer.android.com/reference/android/os/Handler.html#postDelayed%28java.lang.Runnable,%20long%29

編輯

其實,我收回這句話。重新閱讀後,看起來你想要做的是當用戶按下後退按鈕時保存狀態,在此期間顯示對話框,然後關閉對話框並在完成時完成活動。這是你需要的:

@Override 
public void onBackPressed() { 
    new SaveStateTask().execute(); 
} 

protected void saveMyActivityState() { 
    // Do your stuff for however long it takes... 
    // This is executing on a background thread... 
} 

class SaveStateTask extends AsyncTask<Void, Void, Void> 
{ 
    ProgressDialog progressDialog; 

    @Override 
    protected void onPreExecute() { 
     progressDialog = ProgressDialog.show(NameOfYourActivity.this, "", "Loading. Please wait...", true); 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     progressDialog.dismiss(); 
     NameOfYourActivity.this.finish(); 
    } 

    @Override 
    protected Void doInBackground(Void... arg0) { 

     saveMyActivityState(); 

     return null; 
    } 

} 
+0

怎麼可以我在我的代碼中實現。請給我看一個與我的代碼相關的示例 – AndroidDev

+0

更新我的回覆。我認爲這更符合你所尋找的內容。讓我知道如果它不是。 – Rich

+0

你的工作。但在SaveMyactivityState()當我打電話onPause()函數..進度對話框旋轉一秒,然後停止另一秒時間旋轉當活動將完成..但我想要的是progrss酒吧旋轉,直到活動沒有完成...所以爲什麼這個好消息。 – AndroidDev