You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:58:48