Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.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 在使用MVVM体系结构和数据绑定时,如何突出显示recyclerview项?_Android_Android Recyclerview_Android Databinding_Android Mvvm - Fatal编程技术网

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

Android 在使用MVVM体系结构和数据绑定时,如何突出显示recyclerview项?,android,android-recyclerview,android-databinding,android-mvvm,Android,Android Recyclerview,Android Databinding,Android Mvvm,在坚持MVVM原则和使用数据绑定的同时,我试图突出显示一个recyclerview项。但是我很难理解如何处理选择行 当前,我使用以下界面将recyclerview项onclick传递给viewmodel: public interface ItemClickListener { void onItemClicked(String id); } 视图onclick是数据绑定的: <layout xmlns:android="http://schemas.android.com/ap

在坚持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体系结构中,您的UI由ViewModel公开的数据驱动。在您的特定情况下,这意味着您在ViewHolder中显示的
项应该能够判断它是否被选中。要做到这一点,最简单的解决方案是在
类中添加
isSelected
布尔值。该布尔值将允许您决定在布局中使用哪个
backgroundColor

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

如果您使用的是体系结构组件LiveData,请确保发布列表的新值,我认为这将通知您的适配器更改。如果您不这样做,您的UI将不会得到刷新,因为RecyclerView将不会意识到正在显示的数据中的更改