2012-03-09 71 views
3

我有一个带有一些按钮的片段,当点击一个按钮时,它应该显示一个ProgressDialog,加载一个位图阵列并将其显示在画廊的片段中,并关闭ProgressDialog。ProgressDialog不会立即出现

但是ProgressDialog不会立即显示,它需要1秒或2秒的时间,并且在我的画廊展示的那一刻闪烁。在的onCreate

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

    //load images 
    //show gallery 

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

我的处理程序:点击后

Im做这个使用

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() 
+0

发布您的完整代码?你使用Thread还是Async? – 2012-03-09 15:19:23

+0

@Samir:他说他在'onCreate'创建了'Handler',并在点击后显示'ProgressDialog'。我看不出有关该代码的问题。 – 2012-03-09 15:26:39

+0

哟试试看,会发生什么? – 2012-03-09 15:27:48

回答

1

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

你应该看看使用AsyncTask来执行在后台加载图像。

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

+0

谢谢,点击事件没有被消耗,直到图像加载,我将加载代码移到AsyncTask里面,它工作 – rafael 2012-03-09 18:39:57

1

文档不没有多说关于setIndeterminate(boolean),所以我不确定。但我在我的应用程序中使用它,它可以工作:

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

你可以试试吗?

+0

同样的结果,我试图把一个Thread.sleep(5000);后加载图像和ProgressDialog刚刚开始此后,几乎在同一时间的展厅=( – rafael 2012-03-09 15:42:47

+0

你可以在调用'show()'后发布logcat? – 2012-03-09 15:49:14