如何在 MVVM 结构中的 RecyclerView 项上设置 OnClickListener
How to set OnClickListener on RecyclerView item in MVVM structure
我有一个在 MVVM
中构建的应用程序。我在同一个 activity 中有不同的片段。每个 fragment
都有自己的 ViewModel
并且所有数据都是从 REST API.
中检索的
在 FragmentA 中,有一个 RecyclerView
列出了 X class 个实例。我想在 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])
}
}
}
这里有一些文章可能会帮助您大致了解这些内容。
不过他们不会直接回答你的问题
希望对您有所帮助
link 1 link 2
如果您使用数据绑定,您需要通过适配器将您的视图(在您的情况下是 Fragment)传递到布局中 class,并且您需要在布局文件中导入您的视图以便能够调用视图的方法
android:onClick="@{() -> view.onXXXClick(item)}"
将您当前的模型 class item
传递到这个新方法中,然后在您的视图中创建 onXXXClick 方法并执行任何您想要的操作。
如果您要执行与视图相关的操作,例如从一个片段导航到另一个片段或启动服务,您应该创建以上函数在您看来,如果您正在进行网络或数据库相关操作,它应该在您的 ViewModel
中
你可以查看我的 GitHub repository 以更好地理解。
我有一个在 MVVM
中构建的应用程序。我在同一个 activity 中有不同的片段。每个 fragment
都有自己的 ViewModel
并且所有数据都是从 REST API.
在 FragmentA 中,有一个 RecyclerView
列出了 X class 个实例。我想在 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])
}
}
}
这里有一些文章可能会帮助您大致了解这些内容。 不过他们不会直接回答你的问题
希望对您有所帮助 link 1 link 2
如果您使用数据绑定,您需要通过适配器将您的视图(在您的情况下是 Fragment)传递到布局中 class,并且您需要在布局文件中导入您的视图以便能够调用视图的方法
android:onClick="@{() -> view.onXXXClick(item)}"
将您当前的模型 class item
传递到这个新方法中,然后在您的视图中创建 onXXXClick 方法并执行任何您想要的操作。
如果您要执行与视图相关的操作,例如从一个片段导航到另一个片段或启动服务,您应该创建以上函数在您看来,如果您正在进行网络或数据库相关操作,它应该在您的 ViewModel
你可以查看我的 GitHub repository 以更好地理解。