当前位置: 首页 > 知识库问答 >
问题:

使用MVVM架构和数据绑定时,如何突出显示回收器视图项目?

傅阿苏
2023-03-14

我试图在遵循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(视图视图)并将其与位置一起通过我的接口?

共有1个答案

居焱
2023-03-14

在MVVM架构中,用户界面由视图模型公开的数据驱动。在您的特殊情况下,这意味着您在视图容器中显示的< code>Item应该能够判断它是否被选中。为此,最简单的解决方案是向您的< code>Item类添加一个< code>isSelected布尔值。该布尔值将允许您决定在布局中使用哪个< code>backgroundColor。

要以MVVM方式将所有内容链接在一起,您的ItemClickListener实现应该修改您的ViewModel的列表

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

 类似资料:
  • 我有一个从内部存储器加载图像的回收器视图。我想在单击时突出显示所选项。我试了很多方法,但都不起作用。实际上,我需要的是,当我在Recycler视图中单击任何项目时,该项目必须进入我的ArrayList,它也应该突出显示,当我单击或说unselect时,它必须再次变为正常。以下是我的代码: 这是我的适配器类:

  • 当我按下后退按钮时,这个ShoppingActivity会被破坏,当我再次访问该activity时,我发现我的回收器视图项目被替换了两次。我该如何解决这个问题? ShoppingActivity.java这里编写的所有代码和volley类也在这里调用,当我按下后退键并再次访问该活动时,我发现我的回收器视图项被替换了 @override protected void onCreate(Bundle

  • 我正面临一个奇怪的错误,其中recyclerview只显示了一个项目。下面是我的recyclerview适配器的代码: 我已经在其他应用程序中使用了这段代码,它的工作非常完美。我已经检查了聊天数据,这也是完美的。 这里是指向git repo布局文件的链接:布局文件

  • 我正试图添加数据在我的回收视图从火炉。我有带名字的文件(级别级别编号)但没有显示我的活动这是代码: 主要活动水平: 公共类级别活动扩展AppCompat活动{ } 水平调整器 公共类级别适配器扩展了RecyclerView。适配器 }

  • 我刚开始在firebase工作。我设法上传了文本和图像,但是,我无法检索要显示在回收器视图中的图像,只能检索文本。我用的是毕加索依赖。我已经包括了我的主要活动。java类,该类负责显示从问题“我的适配器”中的firebase检索的回收器视图项。java类和模型类。我相信,在我将图像URI上载到firebase存储时,我可能犯了没有存储图像URI的错误,因此适配器无法检索图像位置。我想这可能是因为我

  • 这是我的活动: 卡片xml 活动xml 这是我的自定义适配器 我已经看了很多关于如何让它工作的指南,但它仍然不起作用。有人知道发生了什么事吗?我的版本是25.0。1,并导入所有模块。但它并没有在布局中添加一张卡片。