Kotlin类型不匹配:推断类型是查看! 但TextView是预期的
美好的一天! 在Android Studio 3.0
使用Kotlin
1.1.51,针对Android API 26
创建具有下一个ViewHolder
RecyclerView
,但在构建项目时收到错误:
类型不匹配:推断类型是查看! 但TextView是预期的
所以我找不到TextView
直接到ViewHolder
变量,但发现周围的方式 – 查找视图和之后, as TextView
投入,你可以看到holder.
的代码holder.
TextView中。 看起来不太好,所以有解决方案如何防止这个错误,或者它是一个错误? RecyclerView
的代码:
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH { val view = LayoutInflater.from(parent.context) .inflate(R.layout.custom_item_view, parent, false) return VH(view) } override fun onBindViewHolder(holder: VH, position: Int) { val event: TimelineEvent = items[position] // does not work because of error in VH class holder.timeView.text = event.time // works (holder.textView as TextView).text = event.text } class VH(itemView: View) : RecyclerView.ViewHolder(itemView) { // error: Type mismatch: inferred type is View! but TextView was expected val timeView: TextView = itemView.findViewById(R.id.timeline_item_time) // works fine val textView: View = itemView.findViewById(R.id.timeline_item_text) }
您只需要按照预期的类型投下找到的视图即可:
val timeView: TextView = itemView.findViewById(R.id.timeline_item_time) as TextView
要么
val timeView: TextView = itemView.findViewById<TextView>(R.id.timeline_item_time)
看起来你不在API级别26或更新。 那就是当findViewById
被改变时,它将返回一个通用的T
而不是基类View
类,这使得你可以用这些方法从Kotlin中使用它。
您可以手动将findViewById
调用的结果转换为另一个答案中建议的@AlexTa,也可以将支持库版本更新到26
或更高版本 – 最新的当前版本是27.0.0
。 这些新版本可以从Google的Maven仓库获得 。