android - 使用 MVVM 架构和数据绑定(bind)时如何突出显示 recyclerview 项目?

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

我试图在遵守 MVVM 原则和使用数据绑定(bind)的同时突出显示 recyclerview 项目。但我无法理解如何处理选择行。

我目前使用以下接口(interface)将我的 recyclerview 项目 onclick 传递给 View 模型:

public interface ItemClickListener
{
    void onItemClicked(String id);
}

View onclick 是数据绑定(bind)的:

<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 实现了接口(interface),所以我有一个对 Item 的引用。监听器在 Activity 中实例化并传递到适配器中。

我将如何处理选择一个 recyclerview 项目(并给它一个背景颜色)? viewholder 是否应该实现 onClickListener(View view) 并将它连同它的位置一起传递到我的界面?

最佳答案

在 MVVM 架构中,您的 UI 由 ViewModel 公开的数据驱动。在您的特定情况下,这意味着 Item您在 ViewHolder 中显示的那个应该能够判断它是否被选中。为此,最简单的解决方案是添加 isSelected bool 值到你的 Item类(class)。该 bool 值将允许您决定使用哪个 backgroundColor在您的布局中使用。

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

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

关于android - 使用 MVVM 架构和数据绑定(bind)时如何突出显示 recyclerview 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55803961/

相关文章:

java - 如何创建订阅可观察对象的BehaviorSubject?

android - Recyclerview 第一项开始 margin

android - 如何在数据绑定(bind)的 xml 中有空格和特殊字符?

Androidx 和数据绑定(bind)

java - Android 上的“filenotfound”异常

android - AlertDialog setcancelable (false) 方法

android - 从云中列出/流/下载文件的方法是什么?

java - 不同类型的列表作为参数

Android如何根据背景图片改变文字颜色

android - 使用 Android 数据绑定(bind),如何指定在 Android Studio 布局预览期间显示的虚拟(或 "default")文本?