【发布时间】: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(<position of item>。另外,您为什么不使用选择器而不是使用数据绑定来做呢? -
@Fred 选择器与 recyclerview-selection 库中的一样吗?认为这是矫枉过正,因为我只想选择 1 行。我尝试使用 notifyItemChanged 和 notifydatasetchanged 但似乎没有帮助
-
TBH 我从来没有听说过这样的图书馆。我指的是针对这个确切用例的 Android 选择器。它还有另一个名字 - StateList
标签: android android-recyclerview android-databinding android-mvvm