【问题标题】:How to highlight recyclerview item when using MVVM architecture and databinding?使用 MVVM 架构和数据绑定时如何突出显示 recyclerview 项?
【发布时间】:2019-04-23 03:36:49
【问题描述】:

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

我目前使用以下接口将我的 recyclerview 项目 onclick 传递给 viewmodel:

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

view 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 的引用。监听器在 Activity 中实例化并传递给适配器。

我将如何处理选择一个 recyclerview 项目(并给它一个背景颜色)?视图持有者是否应该实现 onClickListener(View view) 并将其与位置一起通过我的界面?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 2017-09-19
      • 2021-08-22
      • 2020-10-22
      • 2017-11-28
      • 1970-01-01
      相关资源
      最近更新 更多