Я думаю, что этот вопрос может быть задан, а также может быть на плохом языке. ТАК моя кодировка
- Активность ... recyclerview
- Класс адаптера
- MyViewHolder внутренний класс класса адаптера
AsyncTask inner класс класса адаптера
public static class MyViewHolder extends RecyclerView.ViewHolder {
Progressbar progressbar;
public MyViewHolder(View itemView) {
super(itemView);
progressbar= (Progressbar ) itemView.findViewById(R.id.progressbar_item);
progressbar.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
new DownloadAudioFromURL(new AsyncResponse() {
@Override
public void downloadProgress(int progress) {
progressbar.setProgress(progress);
}
}).execute(params);
}
});
}
}
Это AsyncTask
class DownloadAudioFromURL extends AsyncTask<MyTaskParams, Integer, Boolean> {
public AsyncResponse delegate = null;
public DownloadAudioFromURL(AsyncResponse delegate){
this.delegate = delegate;
}
String audiopath=null;
int position=-1;
@Override
protected Boolean doInBackground(MyTaskParams... params) {
position=params[0].position;
int count;
try {
//downloading codes
} catch (Exception e) {
Log.e("Error: ", e.getMessage());
}
audiopath=path;
return true;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
int progress=0;
if (!(values[0] ==progress))
{
delegate.downloadProgress(values[0]);//callback for progress
progress=values[0];
}
}
}
Этого кода достаточно для обновления индикатора выполнения внутри viewView ViewHolder до текущего состояния активности. Но проблема заключается в том, что всякий раз, когда go возвращается из этого действия и возвращается снова, представление элемента viewHolder сбрасывается, и в прогрессбар не обнаруживается прогресс, в консоли отображается только фоновый поток. другими словами, itemview и Asynctask не связаны после выхода из действия. Итак, как постоянно обновлять этот viewHolder ProgressBar, пока AsyncTask не завершит работу sh.