Bir RecyclerView var. İçinde, öğeler standart bir düzen var - bir TextView ve bir ProgressBar. Öğeler, çalışma zamanında geri dönüşüm görüntüsüne eklenir. Bir Öğe eklendiğinde, ProgressBar'ı güncelleyen bir AsyncTask başlatılır. AsynTask, RecyclerView Bağdaştırıcısından ProgressBar nesnesine bir başvuru içerir. Geri dönüştürücü görünümünde çok fazla öğe olduğunda sorun oluşuyor.Geri Dönüşüm Kutusu'nda bir ProgressBar Güncelleme
RecyclerView öğesinin eski görünümleri geri dönüştürdüğünü biliyorum ve bu nedenle, ilerleme çubukları için bu atleast etrafında bir yol istiyorum.
Bunu uygulamak için ideal yol ne olurdu?
takiben Ayrıca, notifydatasetchanged kullanarak RecyclerView öğe ekleme ediyorum Adaptörü
public class RecViewAdapter extends
RecyclerView.Adapter<RecViewAdapter.ViewHolder> {
Context mContext;
List<String> mRunns;
static ExecutorService mExec;
static HashSet<Integer> mProcessed = new HashSet<>();
public RecViewAdapter(Context context, List<String> runns) {
mContext = context;
mRunns = runns;
mExec = Executors.newFixedThreadPool(1);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.runnabel_item, viewGroup,
false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.runnName.setText(mRunns.get(position));
if (!mProcessed.contains(position)) {
new ProgressTask(holder.pBar, position).executeOnExecutor(mExec, null);
mProcessed.add(position);
}
}
@Override
public int getItemCount() {
return mRunns.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
TextView runnName;
ProgressBar pBar;
public ViewHolder(View view) {
super(view);
runnName = (TextView) view.findViewById(R.id.textView);
pBar = (ProgressBar) view.findViewById(R.id.progressBar);
pBar.setIndeterminate(false);
pBar.setMax(100);
pBar.setProgress(0);
}
}
}
bir alıntıdır.
Bireysel AsynTasks'ın BroadCast alıcıları aracılığıyla ilgili görünümlerini güncellemeye çalışıyorum. Her yayın güncellemesinde, asynctask bir yayın amacı gönderir. BroadCast alıcısı, ProgressBar'ı güncelleyecek olan aktivitede bir işlevi çağıracaktır. –