我有一个按照MVVM结构组织的应用程序。在同一个活动中有不同的片段。每个片段都有自己的ViewModel,并且所有数据都从REST API中检索。
在FragmentA中,有一个RecyclerView列出X类实例。我想在RecyclerView上设置OnClickListener,并且当RecyclerView中的项目被点击时,我想将相关的X对象传递到FragmentB。我该如何实现这一点?
我有一个按照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存储库以更好地理解。