如何在任务完成之前编辑AsyncTask中的活动视图?我无法从doInBackground方法访问任何视图,我不想等到任务完成。有办法去做吗?或者我是否必须在doInBackground中创建一个线程(听起来对我来说是不好的做法),然后访问该线程的完成视图?
答案 0 :(得分:1)
覆盖此方法:
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
在AsyncTask的doInBackground()
中调用它。此方法publishProgress(Progress... values)
doInBackground()
调用它时,会在UI线程上发生。
有关详情,请参阅AsyncTask
答案 1 :(得分:1)
您需要在AsyncTask类中重写此方法:
@Override
protected void onProgressUpdate(Void... values) {
// TODO Auto-generated method stub
ProgressBar bar = (ProgressBar) findViewById(R.id.prgLoading);
bar.setIndeterminate(true);
super.onProgressUpdate(values);
}
您可以在此处显示进度条,并在其中设置一些值。
答案 2 :(得分:1)
您可以定义包含以下内容的类MyAsyncTask
:
private final ProgressDialog progressDialog;
public MyAsyncTask(Context context) {
super(context);
progressDialog = new ProgressDialog(context);
progressDialog.setTitle(R.string.title);
progressDialog.setButton(
DialogInterface.BUTTON_NEGATIVE,
context.getResources().getString(R.string.abort),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MyAsyncTask.this.cancel(true);
progressDialog.dismiss();
}
}
);
progressDialog.show();
}
@Override
protected void onProgressUpdate(String... params) {
progressDialog.setMessage(params[0]);
}
然后,您可以使用ProgressDialog
向GUI报告,例如,通过调用publishProgress("TEST")
。
答案 3 :(得分:1)
您可以从onProgressUpdate()
更新用户界面。有一种棘手的方法,您可以发送一些整数或布尔值来进行更新并根据条件更改您的UI。
@Override
protected void onProgressUpdate(Integer... values) {
if(values[0] == 1) {
// update the UI
button.settext("updating");
}
}
您可以通过调用
调用onProgressUpdate fram asynctaskpublishProgress(1);
希望这有效,试试。