回收器视图项有一个图标,该图标具有用于可见性的条件数据绑定,但它不会刷新



我有一个回收器视图,其中包含预定义的UI布局元素列表。 在预定义的 UI 布局中,如果项目是项目类型,则有一个可见的图标。 如果不是该类型,则不可见。 当用户进入选择模式时,我在适配器中设置了一个自定义变量以在所有项目上隐藏此图标,但它不起作用。

我尝试使用 DiffUtil 回调来更新内容(即当内容是状态更改时带有可见图标的回调时,为 contentIsSame 返回 false),我看到它闪烁,但只有一行,它恢复了。

我尝试使用通知数据集更改,也使所有无效,两者都不起作用。

我在互联网上寻找与我的问题类似的任何内容,但找不到任何有效的解决方案。

在每行的预定义 UI 布局 XML 中:

<variable
name="isSelecting"
type="boolean"/>

然后在可见性绑定中(省略其他属性):

<ImageView
app:visibleGone="@{project.isIconVisible &amp;&amp; !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()。

如果我手动将isSelect设置为true或false,则在填充列表之前,它会正确显示/隐藏图标。 它只是在更改时不更新。

挖掘后,我意识到 listItemBinding 是一个单独的项目,而不是整个列表。 然后我发现这个:回收器视图 - 获取所有现有的视图/视图持有者

我意识到我找错了地方来设置 isSelected 值,它应该进入 onBindViewHolder,然后只需调用 notifyDataSetChanged(),它将处理其余的。

最新更新