2011-04-07 78 views
0

嗯,我已經看到各種各樣的失敗,同時試圖讓這個工作。我有一個通過Activity啓動的線程。線程需要創建/顯示進度對話框並將其解除。無法獲得ProgressDialog以線程顯示

當我試圖直接顯示ProgressDialog時,出現一個錯誤,表示我的Looper沒有準備好。我用一個Looper擡起頭來實施它。但是,我必須調用Looper.loop來顯示進度對話框。在顯示應用程序凍結之後,永遠不會繼續Looper.loop調用。

我無法使它工作,所以使用HandlerThread和Handler尋找一種全新的方式。我創建一個HandlerThread並啓動它。我從線程中獲得循環,並創建一個Handler。我的ProgressDialog或Toasts根本不會顯示。

有沒有更簡單的方法去做到這一點?

+0

你可以在這裏發佈你的代碼嗎... – Vinay 2011-04-07 03:30:30

回答

1

U可以有一個

private Handler stopProgressHandler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) {   
     setProgressBarIndeterminateVisibility(false); 
    } 
}; 
private Handler startProgressHandler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) {   
     setProgressBarIndeterminateVisibility(true); 
    } 
}; 

,這樣當u啓動線程啓動progressbar和線程完成後ü可以停止progressbar

public void closeProgressbar(){ 
    //bluetoothconnector.onDestroy(); 
    stopProgressHandler.sendEmptyMessage(0); 
} 
public void openProgressbar(){ 
    //bluetoothconnector.onDestroy(); 
    startProgressHandler.sendEmptyMessage(0); 
} 

這將有助於調用progressbar啓動和停止。這將是解決方案之一..

1

不確定關於ProgressDialog,但據我所知,Android中所有UI相關的東西都需要在UI線程中更新。實際上,有實現異步任務一件容易的輔助類:http://developer.android.com/reference/android/os/AsyncTask.html

或者,你可以創建一個處理程序(這將是對UI線程),並使用創建對話框:

Handler uiHandler; 
//Activity onCreate 
onCreate(...){ 
    uiHandler = new Handler(); 
} 

// Somewhere in your other thread, 
uiHandler.postRunnable(new Runnable(){ 
    @Override 
    public void run(){ 
     // Create or update dialog 
     ... 
    } 
}); 
+1

另一種方法是使用runOnUiThread()http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29 – 2011-04-07 03:40:31

0

最後的答案是錯的....

它應該是:

setProgressBarIndeterminateVisibility(Boolean.TRUE | Boolean.FALSE);