我创建了一个异步任务,并希望在doBackground的不同阶段更改进度对话框的消息。这是代码:
public class sc extends AsyncTask<Integer,String,Void>
{
ProgressDialog dialog;
protected void onPreExecute()
{
dialog=new ProgressDialog(Loc.this);
dialog.show();
}
@Override
protected Void doInBackground(Integer... params)
{
onProgressUpdate("Contacting server..Please wait..");
//Do some work
onProgressUpdate("Processing the result");
//Do some work
onProgressUpdate("Calculating..");
dialog.dismiss();
return null;
}
protected void onProgressUpdate(String ui)
{
dialog.setMessage(ui);
}
}
但问题是,进度对话框只显示第一条消息。请帮我找一个解决方案。
答案 0 :(得分:8)
protected Void doInBackground(Integer... params)
{
onProgessUpdate("Contacting server..Please wait..");
...
}
Urrrm,不,不行。
...试
publishProgress("Contacting server..Please wait..");
您必须在doInBackground(..)
中“发布”您的进度才能调用onProgressUpdate(...)
。
另请勿在{{1}}中致电dialog.dismiss()
而是在doInBackground(...)
中调用它。
答案 1 :(得分:3)
我认为应该是......
publishProgress("Your Dialog message..");
不是
onProgessUpdate("Processing the result");
doInBack中的..()
类似的东西,
protected Long doInBackground(URL... urls) {
publishProgress("Hello");
return null;
}
protected void onProgressUpdate(String msg) {
dialog.setMessage(msg);
}
答案 2 :(得分:0)
问题可能还在于您没有设置“初始消息”。如果您在ProgressDialog
内尝试执行此操作之前没有为onProgressUpdate
设置消息,则无法使用。
ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setTitle("Title");
progressDialog.setMessage("Initial message needed");
public class foo extends AsyncTask<Void,Integer,Void> {
...
}
另请注意,如果您需要进度更新和消息,则可以使用Integer变量参数,其中一个整数定义进度,另一个将消息定义为{{1}的索引。消息数组(如果事先知道消息)。