我试图在遵循MVVM原则和使用数据绑定的同时突出recyclerview项目。但是我不明白如何处理选择行。
目前,我使用以下界面将recyclerview项onclick传递给viewmodel:
public interface ItemClickListener
{
void onItemClicked(String id);
}
视图onclick是数据绑定的:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="model"
type="Item" />
<variable
name="listener"
type="ItemClickListener" />
</data>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{model.name}"
android:onClick="@{() -> listener.onItemClicked(model.name)}" />
</layout>
viewmodel实现了接口,所以我有一个对该项的引用。侦听器在活动中实例化,并传递到适配器中。
我将如何处理选择一个recyclerview项目(并为其提供背景色)?viewholder是否应该实现onClickListener(视图视图)并将其与位置一起通过我的接口?
在MVVM架构中,用户界面由视图模型公开的数据驱动。在您的特殊情况下,这意味着您在视图容器中显示的< code>Item应该能够判断它是否被选中。为此,最简单的解决方案是向您的< code>Item类添加一个< code>isSelected布尔值。该布尔值将允许您决定在布局中使用哪个< code>backgroundColor。
要以MVVM方式将所有内容链接在一起,您的ItemClickListener
实现应该修改您的ViewModel的列表
如果您使用的是体系结构组件 LiveData,请确保发布 List 的新值,我假设这会通知您的适配器更改。如果不这样做,您的 UI 将不会刷新,因为 RecyclerView 不会意识到所显示的数据发生更改。