使用MVVM体系结构和数据绑定时如何突出显示recyclerview项目?

时间:2019-04-23 03:36:49

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

在尝试遵循MVVM原则以及使用数据绑定时,我试图突出显示一个recyclerview项目。但是我在理解如何处理选择行时遇到了麻烦。

我目前使用以下界面将recyclerview项目onclick传递给视图模型:

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实现了接口,因此我对Item有一个引用。监听器在活动中实例化并传递到适配器。

我如何处理选择一个recyclerview物品(并为其赋予背景色)? Viewholder是否应该实现onClickListener(View view)并将其通过位置以及位置传递给我?

1 个答案:

答案 0 :(得分:1)

在MVVM体系结构中,您的UI由ViewModel公开的数据驱动。在您的特定情况下,这意味着您在ViewHolder中显示的Item应该能够知道是否已选择它。为此,最简单的解决方案是向您的isSelected类添加一个Item布尔值。该布尔值将允许您决定在布局中使用哪个backgroundColor

要以MVVM方式将所有内容链接在一起,您的ItemClickListener实现应通过切换刚刚单击的Item的List<Item>布尔值来修改ViewModel的isSelected

如果您正在使用LiveData体系结构组件,请确保发布List的新值,我认为该新值将通知您的Adapter更改。如果不这样做,由于RecyclerView不会知道所显示数据的变化,因此您的UI将不会刷新。