3

Следующая часть моего кода для 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(), если это необходимо.

+0

ViewHolder не должен быть привязан к позиции. Если у вас есть 100 предметов, нет 100 ViewHolders. Переопределите метод bindView (я не помню точное имя) в адаптере, чтобы изменить видимость в отношении позиции. – harism

+0

Не может найти такой метод в 'RecyclerView.Adapter'. – paradite

ответ

8
###This is the solution to your problem:### 

holder.mImageViewContentPic.setVisibility(View.VISIBLE); 
if(item.getContentDrawable() == null){ 
     holder.mImageViewContentPic.setVisibility(View.GONE); 
    } 
+0

Спасибо. Это работает. Можете объяснить, почему это работает? – paradite

+0

Это относится к реализации шаблона держателя вида. Он использует один и тот же вид каждый раз, или вы можете повторно использовать представление, поэтому оставшиеся просмотры остаются в прошлом, поэтому вы должны снова сделать его видимым. Есть много трюков для работы с этими многоразовыми видами и надеюсь, что вы найдете их в ближайшем будущем. –

+0

ОК, я думаю, я получу идею «многоразовых просмотров» – paradite

0

RecyclerView Поскольку использование рецикла очень хорошо, ViewHolder А может быть использована, чтобы быть ViewHolder B, так что вам нужно каждый конкретный атрибут ViewHolder в случае некоторых атрибутов прикрепить к неправильному объекта.

 Смежные вопросы

  • Нет связанных вопросов^_^