Я только начал использовать RecyclerView для отображения некоторых строк, содержащих ImageView и TextView.Все правильно отображается при открытии экрана.Если я быстро прокручиваю до конца списка, то быстро возвращаюсь назад, проблем нет.Однако, как только я медленно прокручиваю вниз, чтобы отобразить следующую строку, а 1-я строка больше не отображается, прокрутка назад вверх покажет черный квадрат вместо моего растрового изображения.
Я думал, что будет вызвана onBindViewHolder ()снова при прокрутке вверх, но это происходит только после прокрутки на 3 строки.Похоже, что RecyclerView выполняет предварительную выборку некоторых строк
Я попытался вызвать setItemPrefetchEnabled (false);на layoutManager или setInitialPrefetchItemCount (0);но это ничего не меняет
Есть идеи, что происходит и как это исправить?
Я делаю тыкать, поэтому код здесь минимален
//Фрагмент
final RecyclerView view = this.fragmentView.findViewById(R.id.recyclerView);
view.setHasFixedSize(true);
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
//layoutManager.setItemPrefetchEnabled(false);
//layoutManager.setInitialPrefetchItemCount(0);
view.setLayoutManager(layoutManager);
MyAdapter adapter = new MyAdapter(data);
view.setAdapter(adapter);
// ViewHolder
public class MyViewHolder extends RecyclerView.ViewHolder {
ImageView thumbnail;
TextView name;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
}
}
// Адаптер
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
final View view = LayoutInflater.from(parent.getContext()).inflate(R.id.my_layout, parent, false);
final MyViewHolder viewHolder = buildViewHolder(view);
view.setTag(viewHolder);
return viewHolder;
}
@Override
public void onBindViewHolder(MyViewHolder viewHolder, int position) {
final MyData myData = this.data.get(position);
viewHolder.name.setText(myData.getName());
viewHolder.thumbnail.setImageBitmap(getBitmap(myData.getThumbnailPath()));
}
private MyViewHolder buildViewHolder(View view) {
final MyViewHolder viewHolder = new MyViewHolder(view);
viewHolder.name = view.findViewById(R.id.name);
viewHolder.thumbnail = view.findViewById(R.id.thumbnail);
return viewHolder;
}