android - RecyclerView 适配器中的 OnClickListener 未初始化
问题描述
我正在尝试将 OnClickListener 添加到回收站视图项中,但是我不断收到此错误
lateinit property listener has not been initialized
这是我的适配器的样子
class CartAdapter(private val cartItems: List<CartItemEntity>? = null) : RecyclerView.Adapter<CartAdapter.CartViewHolder>() {
private lateinit var listener: OnItemClickListener
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CartViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.cart_item, parent, false)
return CartViewHolder(view, cartItems!!, listener)
}
override fun getItemCount() = cartItems!!.size
override fun onBindViewHolder(holder: CartViewHolder, position: Int) {
val cartItem = cartItems?.get(position)
holder.productPrice.text = cartItem.productPrice.toInt().toString()
holder.cart = listOf(cartItem)
}
class CartViewHolder(val view: View, var cart: List<CartItemEntity>, listener: OnItemClickListener) : RecyclerView.ViewHolder(view) {
private val cartRemove: TextView = view.findViewById(R.id.cartRemove)
init {
cartRemove.setOnClickListener {
listener.onItemClick(cart)
}
}
}
interface OnItemClickListener{
fun onItemClick(cartItems: List<CartItemEntity>?)
}
fun setOnItemClickListener(listener: OnItemClickListener){
this.listener = listener
}
}
这就是我在我的片段中实现它的方式
adapter!!.setOnItemClickListener(object : CartAdapter.OnItemClickListener{
override fun onItemClick(cartItems: List<CartItemEntity>?) {
Log.e("Cart Item", ""+ cartItems!![0].id)
}
})
不知道做错了什么
解决方案
您可以将侦听器添加为CartAdapter构造函数的一部分
class CartAdapter(private val cartItems: List<CartItemEntity>? = null, itemListener: OnItemClickListener) : RecyclerView.Adapter<CartAdapter.CartViewHolder>() {
private val listener: OnItemClickListener = itemListener
...
interface OnItemClickListener{
fun onItemClick(cartItems: List<CartItemEntity>?)
}
}
然后从您的活动中,在初始化适配器时传递侦听器
val adapter = CartAdapter(itemList, object: CartAdapter.OnItemClickListener {
override fun onItemClick(cartItems: List<CartItemEntity>?) {
Log.e("Cart Item", ""+ cartItems!![0].id)
}
})
推荐阅读
- amazon-web-services - AWS SNI(服务器名称指示)通过 cloudformation
- docker - 在 Raspberry Pi 上的 Libreelec/Kodi 上运行 hello-world Docker 会导致来自守护程序错误的响应
- javascript - Javascript amcharts Yaxis最小值应设置为“00:00”
- image - CygWin 上的 ddrescue 创建一个零大小的图像
- python-3.x - 无法使用有关“pd.read_sql”的结果
- javascript - 复选框上的 setAttribute 函数不影响目标按钮
- python - 计算行之间的线性/多项式值
- python - Jupyter notebook:在显示的图像(jpg/png)上注册鼠标位置点击(移动)
- r - R - MCA(多重对应分析)格式错误的数据
- ruby-on-rails - 是否应该在关联请求外键值后自动更新输入表单?