如何在 MVVM 结构中的 RecyclerView 项上设置 OnClickListener

Meh*_*med 6 android onclicklistener android-recyclerview android-mvvm

我有一个采用 MVVM 结构的应用程序。我在同一个活动中有不同的片段。每个片段都有自己的 ViewModel,所有数据均从 REST API 检索。

在FragmentA中,有一个RecyclerView列出了X个类实例。我想在 RecyclerView 上设置 OnClickListener,并且当在 RecyclerView 中单击某个项目时,我想将相关的 X 对象传递给 FragmentB。我怎样才能实现这个目标?

joh*_*lib 6

我的想象如下。

Fragment 将侦听器对象传递给适配器,适配器又将其传递给 ViewHolders

这是它应该是什么样子的快速草图

class Fragment {
    val listener = object: CustomAdapter.CustomViewHolderListener() {
        override fun onCustomItemClicked(x: Object) {}

    }

    fun onViewCreated() {
        val adapter = CustomAdapter(listener)
    }
}
---------------
class CustomAdapter(private val listener: CustomViewHolderListener) {
    val listOfXObject = emptyList() // this is where you save your x objects

    interface CustomViewHolderListener{
        fun onCustomItemClicked(x : Object)
    }

    override fun onBindViewHolder(holder: CustomViewHolder, position: Int) {
        holder.itemView.setOnClickListener {
            listener.onCustomItemClicked(listOfXObject[position])
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这里有一些文章可能会帮助您了解总体要点。但他们不会直接回答你的问题

希望对您有帮助 链接 1 链接 2


Zaf*_*glu 4

如果您使用数据绑定,则需要通过适配器类将视图(在您的情况下是片段)传递到布局中,并且需要在布局文件中导入视图才能调用视图的方法

android:onClick="@{() -> view.onXXXClick(item)}"
Run Code Online (Sandbox Code Playgroud)

将当前的模型类传递item到这个新方法中,然后在您的视图中创建 onXXXClick 方法并执行您想要的操作。

如果您要执行与视图相关的操作,例如从一个片段导航到另一个片段启动一项服务,您应该在视图中创建上述函数,如果您正在执行网络或数据库相关操作,它应该在您的视图中ViewModel

你可以查看我的GitHub 存储库以更好地理解。