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

vlju58qv  于 2023-04-10  发布在  Android
关注(0)|答案(2)|浏览(117)

我有一个在MVVM中构建的应用程序。我在同一个Activity中有不同的片段。每个片段都有自己的ViewModel,所有数据都从REST API中检索。
在FragmentA中,有一个RecyclerView,它列出了X个类示例。我想在RecyclerView上设置OnClickListener,当在RecyclerView中单击某个项目时,我想将相关的X对象传递给FragmentB。如何实现?

liwlm1x9

liwlm1x91#

我的想象是这样的。
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])
        }
    }
}

这里有一些文章可能会帮助你了解事情的大致要点,但它们不会直接回答你的问题
希望对你有帮助link 1link 2

jk9hmnmh

jk9hmnmh2#

如果使用数据绑定,则需要通过适配器类将视图(在本例中为Fragment)传递到布局中,并且需要将视图导入布局文件中,以便能够调用视图的方法

android:onClick="@{() -> view.onXXXClick(item)}"

将你当前的模型类item传入这个新方法,然后在你的视图中创建onXXXClick方法,然后做你想做的任何事情。
如果你要做与视图相关的操作,比如从一个片段导航到另一个片段或者启动一个服务,你应该在你的视图中创建上面的函数,如果你要做与网络或数据库相关的操作,它应该在你的ViewModel
你可以看看我的GitHub repository更好地理解。

相关问题