Следующая часть моего кода для onBindViewHolder
(внутри MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>
)ViewHolder в RecyclerView.Adapter не специфической для позиционирования
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// - get element from your dataset at this position
StatusItem item = mDataset.get(position);
//......
//Add content and timing to the textview
String content = item.getContent();
holder.mTextViewTime.setText(timing);
//Set the img
holder.imgViewIcon.setImageDrawable(item.getProfileDrawable());
//Set content image (for Instagram)
holder.mImageViewContentPic.setImageDrawable(item.getContentDrawable());
//HIDE THE VIEW Start
if(item.getContentDrawable() == null){
holder.mImageViewContentPic.setVisibility(View.GONE);
}
//HIDE THE VIEW End
}
Часть HIDE THE VIEW
не работает, как ожидалось. Когда я прокручиваю вниз, взгляды работают нормально. Однако, когда я начинаю прокручивать вверх, то есть пересматривать предыдущие представления, ImageViews, которые должны быть VISIBLE
, становится GONE
, хотя я проверил свой набор данных и проверил, что он не был изменен. Попытка вызова других методов в представлениях также дает неустойчивые результаты (позиции и элементы в наборе данных не совпадают).
Похоже, что держатели вида не привязаны к определенным позициям внутри RecyclerView.
Код работает, как ожидается, если я удалю часть HIDE THE VIEW
. Есть ли способ решить эту проблему и динамически скрывать представления в моем случае?
Примечание: Я использовал некоторые AsyncTasks для обновления набора данных и позвонил notifyDataSetChanged()
, если это необходимо.
ViewHolder не должен быть привязан к позиции. Если у вас есть 100 предметов, нет 100 ViewHolders. Переопределите метод bindView (я не помню точное имя) в адаптере, чтобы изменить видимость в отношении позиции. – harism
Не может найти такой метод в 'RecyclerView.Adapter'. – paradite