我有一个 asynktask,它显示一个 progressDialog 并在 doInBackground 方法中更新它的值。方法代码:
@Override
protected void onPreExecute() {
progress = new ProgressDialog(cont);
progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progress.setIndeterminate(true);
progress.setTitle(cont.getResources().getString(R.string.pleaseWait));
progress.setMessage(cont.getResources().getString(R.string.loadingImages));
progress.show();
super.onPreExecute();
}
@Override
protected String doInBackground(Void... arg0) {
progress.setProgress(2);
//do some work on the database and network
progress.setProgress(25);
//Do some extra work
for(int i = 0; i < itemImagesList.size(); i++){
publishProgress((int) ((i / (float) itemImagesList.size()) * 100));
//Do somework
}
}
@Override
protected void onProgressUpdate(Integer... prog) {
progress.setProgress(prog[0]);
}
@Override
protected void onPostExecute(String result) {
progress.dismiss();
super.onPostExecute(result);
}
progressDialog 值根本没有改变!如果我尝试使用以下方法设置对话消息:
progress.setMessage("At item "+i);
如果我把它放在方法的中间会发生一些异常,但在第一个它工作正常!
怎么了?
最佳答案
你的问题与 setIndeterminate(true);
有关,如果你想更新进度,你应该将它设置为 false
(看看 Android setProgress doc ),不要忘记还使用 setMax()
将进度最大值设置为所需值。
正如 Laurent 所说,您只能在 UI 线程上更改进度,因此您必须在 onProgressUpdate
而不是在 doInBackground
关于android - asyncTask 中的 ProgressDialog setProgress 和 setMessage 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28983419/