【发布时间】:2021-06-15 17:46:25
【问题描述】:
这是一个有助于理解的问题。我有一个 recyclerview,经过大量努力,我终于能够处理单击 recyclerview 中的项目。这很困难,因为我看不到它背后的逻辑如何。以下是一些代码片段:
在 MainActivity 中,初始化适配器:
// Adapter takes a lambda function as a parameter - this will go through to what happens onClick
val adapter = MetarItemAdapter{
a: String -> u.l(this, a)
}
在适配器类中,使用所需的 lambda 函数初始化类,现在命名为 onClick:
class MetarItemAdapter(
private val onClick: (String) -> Unit
) : RecyclerView.Adapter<MetarItemAdapter.MetarViewHolder>() {
...rest of adapter code
在 onBindViewHolder 中,这是我使用 onClick 的方式:
override fun onBindViewHolder(holder: MetarViewHolder, position: Int) {
val currentItem = metarList[position]
holder.tvMetar.text = currentItem.metar
holder.tvMetar.setOnClickListener {
onClick(holder.tvMetar.text.toString())
}
}
在查看了很多堆栈溢出问题后,我认为这是在回收站视图中处理点击的方法。
我的问题是为什么我们必须在主活动中定义一个函数,因为它需要初始化类,它可以在整个类中使用,因为它只是用于 onBindViewHolder 中的简单点击处理?为什么处理点击的代码不仅仅包含在 onBindViewHolder 中?
感谢您的阅读,我希望它有意义。很高兴澄清任何观点。
【问题讨论】:
标签: android kotlin android-recyclerview onclicklistener