我正在尝试在进程运行时显示进度对话框,然后在进程完成后关闭。但是在完成该过程之前,该对话框会冻结。我需要在代码中添加什么内容?
这是我的代码:
final ProgressDialog dialog = ProgressDialog.show(this, "","Loading..Wait.." , true);
switch (th.getCurrentTab()) {
case 0:
dialog.show();
Handler menHanlder = new Handler();
menHanlder.postDelayed(new Runnable() {
public void run() {
for(int i = 0; i < menLV.getCount(); i++)
{
if(menBooleanArray.get(i) == true)
{
selectedFromMenList.add(menLV.getItemAtPosition(i).toString());
}
}
handler.setItemListData(WardrobeActivity.this, "Wardrobe", selectedFromMenList, "Name" , "Men" , "Type");
displayView();
drawer.closeMenu();
refreshTabWidget();
selectedFromMenList.clear();
dialog.dismiss();
}
}, 3000);
break;
我使用对话框的方法是不是很糟糕?
任何评论都将不胜感激。
答案 0 :(得分:10)
你的进度Bar介于两者之间,因为你在UI线程上处理繁重的任务,而在Android中,你不应该在UI线程上处理繁重的任务,而是可以将AsyncTask
用于此目的,如下所示: / p>
public class MyTask extends AsyncTask<Void, Integer, Void>{
@Override
protected void onPreExecute() {
//Show progress Dialog here
}
@Override
protected void onPostExecute(Voidresult) {
//Update UI here if needed
//Dismiss Progress Dialog here
}
@Override
protected String doInBackground(Void... params) {
//Do you heavy task here
}
}
AsyncTask经历了4个步骤
执行任务后立即在UI线程上调用 onPreExecute()
。
doInBackground(Param ...)
完成执行后立即在后台线程上调用 onPreExecute()
。
onProgressUpdate(Progress...)
后,在UI线程上调用了 publishProgress(Progress...)
。
onPostExecute(Result)
。
并按如下方式启动AsyncTask
:
new MyTask().execute();
答案 1 :(得分:0)
这是我的实施
在Asynctask onPreExecute()中,我显示了像这样的进度对话框
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(ContentActivity.this);
progressDialog.getWindow().clearFlags(
WindowManager.LayoutParams.FLAG_DIM_BEHIND);
progressDialog.setMessage("Loading...");
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.show();
}
当你的doInBackground中的任务完成时,调用onPostExecute()。我忽略了像这样的进度对话框
@Override
protected void onPostExecute(BlognoneContent result) {
super.onPostExecute(result);
..............
if (progressDialog.isShowing()) {
progressDialog.dismiss();
}
.............
}