我正在学习RecyclerViews,并在看完本教程后尝试制作一个。一切都很顺利,直到最后我在将适配器连接到MainActivity时出错。
我在MainActivity.kt中得到的错误是:
Type mismatch: inferred type is RecyclerAdapter but RecyclerView.Adapter<RecyclerView.ViewHolder>? was expected
第22行出现错误
这是我的MainActivity.kt
package com.example.testing
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
class MainActivity : AppCompatActivity() {
private var layoutManager: RecyclerView.LayoutManager? = null
private var adapter: RecyclerView.Adapter<RecyclerView.ViewHolder>? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val rvTest = findViewById<RecyclerView>(R.id.rvTest)
layoutManager = LinearLayoutManager(this)
rvTest.layoutManager = layoutManager
adapter = RecyclerAdapter()
rvTest.adapter = adapter
}
}
这是我的再生适配器
package com.example.testing
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
class RecyclerAdapter: RecyclerView.Adapter<RecyclerAdapter.ViewHolder>() {
private var Title = arrayOf("Cosmopolitan", "Vodka Sprite")
private var Image = intArrayOf(R.drawable.ic_launcher_foreground, R.drawable.ic_launcher_background)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerAdapter.ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.rv, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: RecyclerAdapter.ViewHolder, position: Int) {
holder.itemTitle.text = Title[position]
holder.itemImage.setImageResource(Image[position])
}
override fun getItemCount(): Int {
return Title.size
}
inner class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){
var itemImage: ImageView
var itemTitle: TextView
init {
itemImage = itemView.findViewById(R.id.imageView)
itemTitle = itemView.findViewById(R.id.textView)
}
}
}
您使用扩展RecyclerView.Adapter<RecyclerView.ViewHolder>()
而不是类RecyclerAdapter
来扩展变量。更换
private var adapter: RecyclerView.Adapter<RecyclerView.ViewHolder>? = null
带有
private lateinit var adapter : RecyclerViewAdapter ?= null
在您的MainActivity.kt 中
private var adapter: RecyclerView.Adapter<RecyclerView.ViewHolder>? = null
适配器变量的数据类型错误将其更改为类似的内容
private var adapter: RecyclerAdapter? = null
此外,您可以改为lateinit&使其成为不可为null的类型,因为它将在Create中初始化
private lateinit var adapter: RecyclerAdapter
更改
private var adapter: RecyclerView.Adapter<RecyclerView.ViewHolder>()
至
private var adapter: RecyclerView.Adapter<RecyclerAdapter.ViewHolder>