Java转Kotlin代码报错求助:onBindViewHolder方法转换异常
修复RecyclerView ViewHolder的两个Kotlin转换错误
咱们一步步来搞定这两个Java转Kotlin时容易踩的小坑:
第一个错误:Unresolved reference(实际是Intent构造的问题)
你写的intent(this, DetailActivity::class.java)有两处不对:
- Kotlin里类名必须首字母大写,所以得写成
Intent(大写I); - 点击事件里的
this指向的是匿名的OnClickListener,不是可用的Context,咱们得用holder.itemView.context来获取ItemView关联的上下文,这个是靠谱的。
第二个错误:非空安全检查提示
这个提示是说你操作的对象可能为空,大概率是mPersonList[position]可能是可空类型(比如你的列表定义成了List<Person?>),直接访问它的属性会触发Kotlin的非空检查。
咱们可以这样处理:先把当前位置的Person对象取出来,用?: return做空值兜底(如果person是空的,直接结束点击逻辑,避免后续报错);所有涉及到可能为空的操作都做安全处理。
修正后的完整代码
override fun onBindViewHolder(holder: PersonViewHolder, position: Int) { // 先处理person为空的情况,避免后续非空报错 val currentPerson = mPersonList[position] ?: return holder.mImage.setImageResource(currentPerson.personImage) holder.mTitle.text = currentPerson.personName holder.mCardView.setOnClickListener { // 修复Intent的创建:大写类名 + 正确的上下文 val intent = Intent(holder.itemView.context, DetailActivity::class.java) // 如果需要传递数据给DetailActivity,比如person的信息,确保数据非空 intent.putExtra("PERSON_NAME", currentPerson.personName) intent.putExtra("PERSON_IMAGE", currentPerson.personImage) // 启动Activity,这里上下文用holder.itemView.context是安全的 holder.itemView.context.startActivity(intent) } }
内容的提问来源于stack exchange,提问作者Or8ng3Cru5h
相关产品推荐
相关产品推荐

