繁体   English   中英

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

[英]How to set OnClickListener on RecyclerView item in MVVM structure

我有一个在MVVM构建的应用程序。 我在同一活动中有不同的片段。 每个fragment都有自己的ViewModel并且所有数据都是从REST API检索的。

在FragmentA中,有一个RecyclerView列出了X个类实例。 我想在RecyclerView上设置OnClickListener ,并且要在RecyclerView单击某个项目时将相关的X对象传递给FragmentB 我该如何实现?

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

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

将当前作为item模型类传递到此新方法中,然后在视图中创建onXXXClick方法并执行所需的任何操作。

如果要执行与视图相关的操作,例如从一个片段导航到另一个片段启动服务 ,则应在视图中创建上述功能;如果要进行与网络或数据库相关的操作,则应在ViewModel

您可以查看我的GitHub存储库以更好地了解。

我的想象如下。

片段将侦听器对象传递给适配器,适配器又将其传递给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])
        }
    }
}

这里有一些文章可能会帮助您了解这些事情的基本内容。 他们虽然没有直接回答您的问题

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM