[从细节活动返回时,要从上次选择的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
?
提前感谢。
onResume in在您转到其他活动并返回时返回,它是Activity生命周期的一部分。但是onBindViewHolder是与适配器设计模式有关的方法,随着您滚动适配器生成单元项的位置,它会继续调用。因此,需要对此方法进行任何更改,并且可以使用notifyItemChanged(position)触发更改。
还有另一种实现方式:这将是一个正确的实现,要从上次选择的RecyclerView中删除突出显示的背景色,您必须在适配器的Item列表上保留一些突出显示的属性。
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()
}