【问题标题】:ProgressDialog doesn't appear immediatelyProgressDialog 不会立即出现
【发布时间】:2012-03-09 15:13:25
【问题描述】:

我有一个带有一些按钮的片段,当单击一个按钮时,它应该显示一个 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()

【问题讨论】:

  • 发布完整代码?你用的是线程还是异步?
  • @Samir:他说他在onCreate创建Handler,点击后显示ProgressDialog。我认为该代码没有问题。
  • @rafael:你能过滤一下日志吗?例如:import android.util.Log; ... Log.d("your-tag", "before show()"); progressDialog.show(); Log.d("your-tag", "after show()");... 并仅过滤您的应用程序生成的所有日志。
  • @rafael:非常感谢。但我帮不了你,这很奇怪:-(

标签: android bitmap handler progressdialog fragment


【解决方案1】:

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

您应该考虑使用AsyncTask 在后台加载图像。

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

【讨论】:

  • 谢谢,直到图像加载,点击事件才被消耗,我将加载代码移到 AsyncTask 内部并且它工作了
【解决方案2】:

文档对setIndeterminate(boolean) 的描述不多,所以我不确定。但我在我的应用程序中使用了它,它可以工作:

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

你可以试试吗?

【讨论】:

  • 同样的结果。我试图放一个 Thread.sleep(5000);在加载图像之后,ProgressDialog 刚刚开始,几乎在 show gallery =(
猜你喜欢
  • 2013-11-01
  • 2023-03-30
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
相关资源
最近更新 更多