当用户单击回收器视图时,我试图突出显示该行。
回收器视图行布局:
<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 在活动中实例化:
ItemClickListener listener = item -> viewModel.selectItem(item);
视图模型将 Item 的 isSelected 属性设置为 true:
public void selectItem(Item item)
{
item.setSelected(true);
}
但是,这不会更改行的背景。通过代码进行调试显示该项的 isSelected 属性设置为 true。我错过了什么吗?
使用 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);
}
}
它将在没有通知数据集更改的情况下工作