gpt4 book ai didi

Android 进度对话框不显示

转载 作者:行者123 更新时间:2023-11-29 22:05:00 30 4
gpt4 key购买 nike

这是主线程中的处理程序,它显示和关闭进度对话框。

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 变量,它表明它已创建,正在运行并且可见,但实际上它是不可见的。

有什么建议吗?

更新:
我做了我一开始就应该做的明显测试。我评论了 DISMISS 消息。进度对话框确实出现了。在 runnable 完成之后出现为时已晚。
我现在不明白 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 消息到达之间有五秒的间隔。

更新二:
我虽然会使用 ProgressDIalog 的 isShowing() 方法

pd = ProgressDialog.show(...)
while(!pd.isShowing());

但它根本没有帮助,即使对话框尚未显示,它也会返回 true。

最佳答案

也许你不应该使用 runOnUiThread() 并通过 Looper.prepare() 函数更好地处理这个问题:

What is the purpose of Looper and how to use it?

此外,您的 AsyncTask 已完成并在 onPostExecute() 中运行,然后您处于 UI 线程中,因此需要额外的 runOnUiThread()没必要。

关于Android 进度对话框不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10935400/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com