Kotlin RecyclerView中ItemView类型不匹配与类型转换异常求助
Kotlin RecyclerView布局绑定问题
问题描述
- 找不到独立的
ItemView类型,只能使用MenuView.ItemView,但Glide报错:Type mismatch: inferred type is MenuView.ItemView but ImageView was expected - 将类型改为
ImageView后,抛出ClassCastException:androidx.constraintlayout.widget.ConstraintLayout cannot be cast to android.widget.ImageView
相关代码
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { var tvName: TextView = itemView.findViewById(R.id.tvName) var tvAge: TextView = itemView.findViewById(R.id.tvAge) var ivProfile: ItemView = itemView.findViewById(R.id.ivProfile) fun bind(contact: Contact) { tvName.text = contact.name tvAge.text = "Age: ${contact.age}" Glide.with(context).load(contact.imageUrl).into (ivProfile) } }
错误日志
类型不匹配错误
Type mismatch: inferred type is MenuView.ItemView but ImageView was expected.
类型转换异常
java.lang.ClassCastException: androidx.constraintlayout.widget.ConstraintLayout cannot be cast to android.widget.ImageView at com.jakob.kotlinrecyclerview.ContactAdapter$ViewHolder.<init>(ContactAdapter.kt:35) at com.jakob.kotlinrecyclerview.ContactAdapter.onCreateViewHolder(ContactAdapter.kt:17) at com.jakob.kotlinrecyclerview.ContactAdapter.onCreateViewHolder(ContactAdapter.kt:13)
解决方案
1. 纠正控件类型声明
你混淆了RecyclerView列表项的根布局itemView和MenuView.ItemView类。ivProfile是列表项布局中的ImageView控件,直接声明为ImageView即可,不需要用MenuView.ItemView。
2. 修复类型转换异常
出现ClassCastException是因为findViewById(R.id.ivProfile)获取到的是ConstraintLayout而非ImageView,按以下步骤排查:
- 检查列表项的布局XML文件,确认
R.id.ivProfile对应的控件确实是ImageView,而非它的父布局ConstraintLayout - 若ID无误,执行
Clean Project后再Rebuild Project清除布局缓存
修正后的代码
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { var tvName: TextView = itemView.findViewById(R.id.tvName) var tvAge: TextView = itemView.findViewById(R.id.tvAge) var ivProfile: ImageView = itemView.findViewById(R.id.ivProfile) fun bind(contact: Contact) { tvName.text = contact.name tvAge.text = "Age: ${contact.age}" Glide.with(itemView.context).load(contact.imageUrl).into(ivProfile) } }
内容的提问来源于stack exchange,提问作者FleetAdmiralJakob
相关产品推荐
相关产品推荐

