我需要完成()点击项目/行时RecyclerView所在的Activity。
我查了一下,但大多数答案都提到了使用context
和(context as MyActivity).finish()
时的旧方法。如何使用binding
执行相同的操作
class MyAdapter(var users: List<User>): RecyclerView.Adapter<MyAdapter.UserViewHolder>() {
inner class UserViewHolder(private val binding: UserRowBinding): RecyclerView.ViewHolder(binding.root) {
init {
binding.root.setOnClickListener {
val intent = Intent(binding.root.context, NextActivity::class.java)
binding.root.context.startActivity(intent)
// call finish() here
}
}
}
}
class MyActivity: App: AppCompatActivity() {
lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
val adapter = MyAdapter(some_array_Of_users)
binding.recyclerView.adapter = adapter
}
}
2条答案
按热度按时间8ehkhllq1#
finish()
是Activity
类的方法。所以你的任务可以换个说法如何从我的
Adapter
中获取Activity
上的参考?你至少有两个选择:
1.使用
itemView
获取Context
:1.从绑定中获取
Context
:小建议:
您还可以考虑将单击处理委托给调用方并将其传递给适配器。从架构上来说可能更正确。而且找到
Activity
的引用也不会有问题。就像这样:sd2nnvve2#
您还可以在Activity本身上创建侦听器函数。
在Adapter中,您可以为侦听器添加一个变量。(或者你可以添加这个作为适配器的参数)
在ViewHolder中,添加listener作为参数,并在setOnClickListener中调用它,它应该看起来像这样:
在Activity中,您可以只设置变量listener值。在这种情况下,您可以设置要查找的'finish()'。像这样的东西,
或者只是在适配器中添加一个参数,
在活动中,
希望这能帮上忙。