這是主線程中的處理程序,它顯示和取消進度對話框。未顯示Android進度對話框
public static final int SHOW = 0;
public static final int DISMISS = 1;
public Handler pdHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.i(TAG, "+ handleMessage(msg:" + msg + ")");
switch(msg.what) {
case SHOW:
pd = ProgressDialog.show(LogViewer.this, "", getText(R.string.loading_msg), true);
break;
case DISMISS:
if(pd != null) {
pd.dismiss();
pd = null;
}
break;
}
}
};
顯示進度的消息是:
pdHandler.sendMessage(pdHandler.obtainMessage(SHOW));
消息解僱是:
pdHandler.sendMessage(pdHandler.obtainMessage(DISMISS));
它運作良好,當我打電話之前,我啓動的AsyncTask時, AsyncTask onPostExecute()將其解除。
但是當它運行在runnable(runOnUiThread)中時,對話框不顯示。在調試器上檢查 pd變量,它顯示它已創建,正在運行並且可見,但實際上它不可見。
有什麼建議嗎?
更新:
我做了明顯的測試,我應該做的第一個地方。我評論了DISMISS消息。進度對話框顯示出來。在可運行結束後,它顯得太晚了。
我現在不知道該DISMISS消息確實否定了不可見的ProgressDialog,這就是爲什麼我沒有看到它。
現在的問題是:我需要ProgressDialog在可執行代碼執行之前顯示。它並不那麼直截了當。我調用層次是這樣的:
onScrollEventChanged
--> runOnUiThread (
--> checkScrollLimits
--> if need to scroll
show ProgressDialog "Loading"
get new data into table
dismiss ProgressDIalog
)
我想是這樣的:
onScrollEventChanged
--> checkScrollLimits
--> if need to scroll
show ProgressDialog "Loading"
--> runOnUiThread (
get new data into table
dismiss ProgressDIalog
)
不過還是解除消息到達那裏之前,ProgressDialog可以顯示。
根據Logcat,SHOW消息的到達和DISMISS消息的到達之間有5秒的間隔。
UPDATE II:
不過,我覺得我會用ProgressDIalog
pd = ProgressDialog.show(...)
while(!pd.isShowing());
的isShowing()方法,但它並不能幫助所有,它返回true,即使對話沒有顯示呢。
謝謝,我會考慮使用活套。 :::: AsyncTask是處理程序按預期執行的示例。我沒有在AsyncTask上運行runOnUiThread。 runnable與應用程序中的其他代碼相關,我需要提供相同的ProgressDialog,我使用的是runOnUiThread。 – ilomambo