【问题标题】:Using databinding to highlight selected recyclerview row使用数据绑定突出显示选定的 recyclerview 行
【发布时间】:2019-04-23 20:22:49
【问题描述】:

当用户点击它时,我试图突出显示我的 recyclerview 的一行。

Recyclerview 行布局:

<data>
    <variable name="model" type="ItemRow" />
    <variable name="listener" type="ItemClickListener" />
</data>

<com.google.android.material.card.MaterialCardView       
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <TextView            
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{model.name}"
        android:onClick="@{() -> listener.onItemClicked(model)}"           
        android:background="@{model.isSelected ? @drawable/white : @drawable/blue}"/>

</com.google.android.material.card.MaterialCardView>

onClickListener 在activity中被实例化:

ItemClickListener listener = item -> viewModel.selectItem(item);

viewmodel 将 Item 的 isSelected 属性设置为 true:

public void selectItem(Item item)
{
    item.setSelected(true);        
}

但是,这不会改变行的背景。通过代码进行调试显示该项目的 isSelected 属性设置为 true。我有什么遗漏吗?

【问题讨论】:

  • 您不应该通知适配器该项目已更改吗? notifyItemChanged(&lt;position of item&gt;。另外,您为什么不使用选择器而不是使用数据绑定来做呢?
  • @Fred 选择器与 recyclerview-selection 库中的一样吗?认为这是矫枉过正,因为我只想选择 1 行。我尝试使用 notifyItemChanged 和 notifydatasetchanged 但似乎没有帮助
  • TBH 我从来没有听说过这样的图书馆。我指的是针对这个确切用例的 Android 选择器。它还有另一个名字 - StateList

标签: android android-recyclerview android-databinding android-mvvm


【解决方案1】:

使用 BaseObservable

class Item extends BaseObservable {
    private boolean isSelected = false;

    @Bindable
    public boolean getIsSelected() {
        return isSelected;
    }

    public void setSelected(Boolean isSelected) {
        this.isSelected = isSelected;
        //Probably it'll has other name, i haven't testing it
        notifyPropertyChanged(BR.selected); 
    }

}

它可以在没有 notfiyDataSetChanged 的​​情况下工作

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多