2011-06-24 50 views
0

我想在我的應用程序中發送進度對話框以在發送某些信息時使用。但是我寫的代碼不起作用。它的send()方法執行,但該對話框中永遠不會出現,因爲它駁回很快進度對話框不會出現 - Android

這裏是我的代碼:

ProgressDialog myProgressDialog = ProgressDialog.show(Tents.this, 
           "Please wait...", "Sending...", true); 
    send(); 
    myProgressDialog.dismiss(); 
    goFour(); 

如何讓我的對話框持續時間更長一點?

+2

你是積極的,它不只是顯示它,然後立即駁回它,如果你註釋退出線? – shaunhusain

+0

好吧,那很尷尬。你是對的。所以我想我真正的問題是如何讓它持續一段時間? – Zaask

+0

是的zaask由shaun建議嘗試檢查後刪除解僱() – Deva

回答

2

首先 - 你不應該在與show()和dismiss()相同的線程中發送() - 因爲你在發送過程中有效地阻止了UI線程。該對話框實際上不會顯示 - 因爲爲了在調用show()之後顯示它,您需要將控件返回給UI線程中的主循環,並且只需完成處理任何事件即可完成處理。否則,UI線程將永遠不會有機會繪製對話框。

最好的辦法是開始在AsyncTask中運行send()並在onPostExecute()中調用dismiss()(請參閱http://developer.android.com/reference/android/os/AsyncTask.html以瞭解如何運行異步任務)。

2

您可能正在收到一個進度對話框,但立即解散,因爲它沒有什麼可以等待。

我會假裝你的OnCreate希望這對我的例子:

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ProgressDialog pd = ProgressDialog.show(this, "Please wait...", "Sending..."); 
    new Thread(new Runnable(){ 
     public void run() { 
      send(); 
      pd.dismiss(); 
     } 
    }).start(); 

    gofour(); 
    } 

編輯:如果它仍然遠立即去,確保send();做一些事情,其實需要一定的時間。 ;)

0

UI線程用於啓動send(),這將不起作用,進度對話框將不會顯示。 在另一個線程或AsynTask doBackground中調用發送,並在完成時關閉對話框。

+0

只要send()函數不會導致onCreate()方法超時(我認爲它可以達到5秒!),它就會工作,但它不是很好的做法! – Kenny

0

如果您的發送操作如此快以至於對話框顯示不正常,我是否可以建議您在活動的右上角使用不確定的進度條,然後使用requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS),然後使用setProgressBarIndeterminateVisibility(true/false)

0

「我想我真正的問題是如何使它持續一段時間?」我的答案是爲什麼??? !!!

我想你會更好地顯示一個警告對話框來確認你的發送功能已經完成,這會讓用戶不得不等待沒有理由!