这是处理程序,在主线程,这表明解散一条进度对话框。
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()将其关闭。
但是,当它可运行(runOnUiThread)内运行,对话框不显示。 检查调试器上的PD变量,它显示了被创建,它正在运行,并且它是可见的,但在实践中是不可见的。
任何建议?
更新:
我做了明显的测试,我应该在第一时间做了。 我评论了解除消息。 和进度对话框并显示出来。 它似乎为时已晚,后可运行结束了。
我现在已了解了解除消息并驳回尚未可见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消息的到达和解除消息的到达之间五秒的间隔。
更新二:
不过,我觉得我会用ProgressDIalog的isShowing()方法
pd = ProgressDialog.show(...)
while(!pd.isShowing());
不过,这并不在所有帮助,它返回true,即使对话没有显示呢。