我有一个recyclerview,其中包含预定义的UI布局元素的列表。在预定义的UI布局中,如果项目是项目类型,则有一个可见的图标。如果不是该类型,则不可见。当用户进入选择模式时,我在适配器中设置了一个自定义变量,以在所有项目上隐藏此图标,但是它不起作用。
我尝试使用DiffUtil回调来更新内容(即,当状态更改时带有可见图标的那一内容返回contentIsSame的false),我看到它闪烁了,但是只有一行,并且它还原了。
我尝试使用notifydatasetchanged,也使用invalidateAll,都不起作用。
我在互联网上查找了与我的问题类似的任何内容,但找不到有效的解决方案。
在每行的预定义UI布局XML中:
<variable
name="isSelecting"
type="boolean"/>
然后在可见性绑定中(省略其他属性):
<ImageView
app:visibleGone="@{project.isIconVisible && !isSelecting}"/>
在创建列表的RecyclerView.Adapter类代码中:
listItemBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.item_project_list, parent, false);
按下选择按钮时,这称为:
public void setIsSelecting(boolean isSelecting){
listItemBinding.setIsSelecting(isSelecting);
这是我尝试其他方法的地方,例如listItemBinding.invalidateAll()。
如果我手动将isSelecting设置为true或false,则在填充列表之前,它将正确显示/隐藏图标。更改后只是不更新。
答案 0 :(得分:0)
挖掘之后,我意识到listItemBinding是一个单独的项目,而不是整个列表。然后我发现了这个:RecyclerView - get all existing views/viewholders
我意识到我在寻找错误的地方来设置isSelected值,并且应该将其放入onBindViewHolder中,然后只需调用notifyDataSetChanged()即可处理其余部分。