2012-03-09 90 views
3

我有一個帶有一些按鈕的片段,當點擊一個按鈕時,它應該顯示一個ProgressDialog,加載一個位圖陣列並將其顯示在畫廊的片段中,並關閉ProgressDialog。ProgressDialog不會立即出現

但是ProgressDialog不會立即顯示,它需要1秒或2秒的時間,並且在我的畫廊展示的那一刻閃爍。在的onCreate

try{ 
    progress = ProgressDialog.show(activity, "", "Loading images", true); 

    //load images 
    //show gallery 

}catch(){ 
    //... 
}finally{ 
    handler.sendEmptyMessage(0); 
} 

我的處理程序:點擊後

Im做這個使用

handler = new Handler() { 
    public void handleMessage(Message msg) { 
     progress.dismiss(); 
    } 
}; 

林的Android 3.1

logcat中顯示什麼:(

03-09 13:17:32.310: D/DEBUG(5695): before show() 
03-09 13:17:32.350: D/DEBUG(5695): after show() 
+0

發佈您的完整代碼?你使用Thread還是Async? – 2012-03-09 15:19:23

+0

@Samir:他說他在'onCreate'創建了'Handler',並在點擊後顯示'ProgressDialog'。我看不出有關該代碼的問題。 – 2012-03-09 15:26:39

+0

喲試試看,會發生什麼? – 2012-03-09 15:27:48

回答

1

您正在主UI線程上加載圖像 - 您應該在後臺進程中執行此操作,否則可能導致您的UI無響應(並導致您的錯誤時間顯示)。

你應該看看使用AsyncTask來執行在後臺加載圖像。

AsyncTask.onPreExecute中顯示ProgressDialog,在AsyncTask.doInBackground中加載圖像並關閉AsyncTask.onPostExecute中的對話框。

+0

謝謝,點擊事件沒有被消耗,直到圖像加載,我將加載代碼移到AsyncTask裏面,它工作 – rafael 2012-03-09 18:39:57

1

文檔不沒有多說關於setIndeterminate(boolean),所以我不確定。但我在我的應用程序中使用它,它可以工作:

ProgressDialog fDialog = new ProgressDialog(your-context); 
fDialog.setMessage(your-message); 
fDialog.setIndeterminate(true); 
// fDialog.setCancelable(cancelable); 
fDialog.show(); 

你可以試試嗎?

+0

同樣的結果,我試圖把一個Thread.sleep(5000);後加載圖像和ProgressDialog剛剛開始此後,幾乎在同一時間的展廳=( – rafael 2012-03-09 15:42:47

+0

你可以在調用'show()'後發佈logcat? – 2012-03-09 15:49:14