gpt4 book ai didi

android - 为什么我可以在数据更改之前在 onResume() 中调用 notifyItemChanged()?

转载 作者:行者123 更新时间:2023-11-30 04:56:17 27 4
gpt4 key购买 nike

为了在我从详细信息 Activity 返回时从最后选择的 RecyclerView 项目中删除突出显示的背景颜色,我在 onResume() 中尝试了这个:

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

这在 onBindViewHolder() 中:

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

onBindViewHolder() 总是在 onResume() 之后调用,所以 selectedPos == position 给出了正确的结果,但我不明白为什么它没有被调用。

为什么我不必将 selectedPos 保存在临时变量中并在 selectedPos 更改后调用 notifyItemChanged(temp)

提前致谢。

最佳答案

onResume 在您转到其他 Activity 并返回后调用,它是 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()
}

关于android - 为什么我可以在数据更改之前在 onResume() 中调用 notifyItemChanged()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59080565/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com