我从 CodeLabs 中看到了一个非常好的方法。
在 ListAdapter 类之外,您可以创建 OnClickListener 类,该类采用带有实体 Class 作为参数的 lambda。
//OnclickListener class outside the Adapter class but on the same file with the adapter
class OnClickListener(val clickListener: (asteroid: Asteroid) -> Unit) {
fun onClick(asteroid: Asteroid) = clickListener(asteroid)
}
Asteroid Class是实体,这里有实体类可以切换。
在 Listener 类中定义设置为 lambda 参数的 onClick 函数。
然后将创建的监听器类传递给 ListAdapter 类构造器
class AsteroidListAdapter(private val clickListener: OnClickListener) : ListAdapter<Asteroid, AsteroidListAdapter.ViewHolder>(
DiffClass()) {
如下覆盖onBindViewHolder()
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val asteroid = getItem(position)
//view.setOnClickListener
holder.itemView.setOnClickListener {
clickListener.onClick(asteroid)
}
holder.bind(asteroid)
}
在 Fragment 的 onCreateView 中,您需要设置 RecyclerView 的 Adapter。
代码显示在这张图片上
这里我们设置 RecyclerView 的适配器,并将 Listener 传递给 Adapter 的构造函数。
您将看到您可以访问单击的实体,并且可以导航到详细信息屏幕等。
我知道这有点棘手,但你可以see step by step of this here