Почему я могу вызвать notifyItemChanged () в onResume () до изменения данных?

Чтобы удалить цвет фона выделения из последнего выбранного элемента RecyclerView, когда я вернусь из своей активности в деталях, я попробовал это в onResume():

mAdapter.notifyItemChanged(mAdapter.selectedPos);
mAdapter.selectedPos = RecyclerView.NO_POSITION;

и это в onBindViewHolder():

viewHolder.itemView.setSelected(selectedPos == position);

onBindViewHolder() всегда вызывается после onResume() так selectedPos == position дает правильный результат, но я не понимаю, почему он не был вызван раньше.

Почему мне не нужно экономить selectedPos во временной переменной и вызовите notifyItemChanged(temp) после смены selectedPos?

Заранее спасибо.

1 ответ

On Resume вызывается после того, как вы переходите к другому действию и возвращаетесь, это часть жизненного цикла Activity. Но onBindViewHolder - это метод, связанный с шаблоном проектирования адаптера, он постоянно вызывается, когда вы прокручиваете его место, где адаптер генерирует элементы ячеек. поэтому любые изменения, которые необходимо применить к этому методу, и вы можете использовать notifyItemChanged(position), чтобы инициировать это изменение.

есть другой способ реализации: это будет правильная реализация, чтобы удалить цвет фона выделения из последнего выбранного RecyclerView, вы должны сохранить какой-то атрибут в списке элементов адаптера, который подсвечивается.

ListItemModel{
 // ohter attributes goes here
 Boolean isSelected = false; // encapsulate
}

в адаптере перечислены элементы следующим образом:

private List<ListItemModel> itemList = new ArrayList()
viewHolder.itemView.setSelected(itemList[position]);

в адаптере

public void unselectAll(){
 for(ListItemModel item: itemList){
  item.isSelected = false
 }
 notifyItemChanged()
}
Другие вопросы по тегам