Meh*_*med 6 android onclicklistener android-recyclerview android-mvvm
我有一个采用 MVVM 结构的应用程序。我在同一个活动中有不同的片段。每个片段都有自己的 ViewModel,所有数据均从 REST API 检索。
在FragmentA中,有一个RecyclerView列出了X个类实例。我想在 RecyclerView 上设置 OnClickListener,并且当在 RecyclerView 中单击某个项目时,我想将相关的 X 对象传递给 FragmentB。我怎样才能实现这个目标?
我的想象如下。
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])
        }
    }
}
这里有一些文章可能会帮助您了解总体要点。但他们不会直接回答你的问题
如果您使用数据绑定,则需要通过适配器类将视图(在您的情况下是片段)传递到布局中,并且需要在布局文件中导入视图才能调用视图的方法
android:onClick="@{() -> view.onXXXClick(item)}"
将当前的模型类传递item到这个新方法中,然后在您的视图中创建 onXXXClick 方法并执行您想要的操作。
如果您要执行与视图相关的操作,例如从一个片段导航到另一个片段或启动一项服务,您应该在视图中创建上述函数,如果您正在执行网络或数据库相关操作,它应该在您的视图中ViewModel
你可以查看我的GitHub 存储库以更好地理解。
| 归档时间: | 
 | 
| 查看次数: | 7926 次 | 
| 最近记录: |