ProgressDialog 不会立即显示

3

我有一个带有一些按钮的片段,在单击按钮时,它应该显示一个ProgressDialog,在数组位图中加载并在画廊中显示它,在此之后关闭ProgressDialog。

但是ProgressDialog不会立即显示,需要大约1或2秒钟时间,仅在我的画廊显示时才会闪烁。

点击按钮后执行以下操作:

try{
    progress = ProgressDialog.show(activity, "", "Loading images", true);

    //load images
    //show gallery

}catch(){
    //...
}finally{
    handler.sendEmptyMessage(0);
}

我的处理程序在onCreate:

handler = new Handler() {
    public void handleMessage(Message msg) {
         progress.dismiss();
    }
};

我正在使用Android 3.1

Logcat没有显示任何内容:(

03-09 13:17:32.310: D/DEBUG(5695): before show()
03-09 13:17:32.350: D/DEBUG(5695): after show()

你能贴出完整的代码吗?你是用Thread还是Async来实现的? - Samir Mangroliya
@Samir:他说他在onCreate中创建了Handler,并在点击后显示了ProgressDialog。我认为这段代码没有问题。 - user942821
@rafael:你能过滤一下日志吗?例如:import android.util.Log; ... Log.d("your-tag", "before show()"); progressDialog.show(); Log.d("your-tag", "after show()");...并且只过滤你的应用程序所产生的所有日志。 - user942821
@rafael:非常感谢。但是很遗憾,我无法帮助你,这很奇怪 :-( - user942821
2个回答

1

文档对于setIndeterminate(boolean)并没有提供太多信息,所以我不确定。但是我在我的应用程序中使用它,而且它有效:

ProgressDialog fDialog = new ProgressDialog(your-context);
fDialog.setMessage(your-message);
fDialog.setIndeterminate(true);
// fDialog.setCancelable(cancelable);
fDialog.show();

你能试试吗?


同样的结果。我尝试在加载图像后放置Thread.sleep(5000);,但ProgressDialog仍然在此之后开始,几乎与显示画廊同时开始 =( - rafael

1

您正在主 UI 线程上加载图像 - 您应该在后台进程中执行此操作,因为它可能导致您的 UI 变得无响应(并且导致您的 ProgressDialog 在错误的时间显示出来)。

您应该研究使用 AsyncTask 在后台执行图像加载操作。

AsyncTask.onPreExecute 中显示 ProgressDialog,在 AsyncTask.doInBackground 中加载图像,并在 AsyncTask.onPostExecute 中关闭对话框。


谢谢,点击事件在图片加载之前没有被消耗掉,我将加载代码移动到AsyncTask内部,然后它就起作用了。 - rafael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接