Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用数据绑定高亮显示选定的recyclerview行_Android_Android Recyclerview_Android Databinding_Android Mvvm - Fatal编程技术网

Android 使用数据绑定高亮显示选定的recyclerview行

Android 使用数据绑定高亮显示选定的recyclerview行,android,android-recyclerview,android-databinding,android-mvvm,Android,Android Recyclerview,Android Databinding,Android Mvvm,当用户单击我的recyclerview时,我试图突出显示它的一行 Recyclerview行布局: <data> <variable name="model" type="ItemRow" /> <variable name="listener" type="ItemClickListener" /> </data> <com.google.android.material.card.MaterialCardView

当用户单击我的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>
viewmodel将Item的isSelected属性设置为true:

public void selectItem(Item item)
{
    item.setSelected(true);        
}
但是,这不会更改行的背景。通过代码调试,我发现该项的isSelected属性设置为true。我缺少什么吗?

使用BaseObservable

类项扩展BaseObservable{
私有布尔值isSelected=false;
@装订的
公共布尔getIsSelected(){
选举产生的回报;
}
公共无效设置已选(布尔值已选){
this.isSelected=isSelected;
//可能它会有另一个名字,我还没有测试过
notifyPropertyChanged(BR.选中);
}
}

它将在不更改notfiyDataSetChanged的情况下工作

您是否应该通知适配器项目已更改。还有,你为什么不使用选择器而不使用数据绑定呢?@Fred selectors就像在recyclerview选择库中一样?我觉得这太过分了,因为我只想选择一行。我尝试使用notifyItemChanged和NotifyDataSetChanged,但似乎没有帮助,因为我从未听说过这样的库。我指的是Android选择器,正是针对这个用例的。还有另外一个名字-
public void selectItem(Item item)
{
    item.setSelected(true);        
}