RecyclerView项具有一个图标,该图标具有条件数据绑定以提高可见性,但不刷新

时间:2019-04-09 18:26:05

标签: android-recyclerview

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

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

我尝试使用notifydatasetchanged,也使用invalidateAll,都不起作用。

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

在每行的预定义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()。

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

1 个答案:

答案 0 :(得分:0)

挖掘之后,我意识到listItemBinding是一个单独的项目,而不是整个列表。然后我发现了这个:RecyclerView - get all existing views/viewholders

我意识到我在寻找错误的地方来设置isSelected值,并且应该将其放入onBindViewHolder中,然后只需调用notifyDataSetChanged()即可处理其余部分。