Почему я могу вызвать 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()
}