这是主线程中的处理程序,它显示和取消进度对话框。未显示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