类型不匹配:推断类型是 RecyclerAdapter 但 RecyclerView.Adapter<RecyclerView.ViewHolder>?预计在 RecyclerView 中

Type mismatch: inferred type is RecyclerAdapter but RecyclerView.Adapter<RecyclerView.ViewHolder>? was expected in RecyclerView

我正在学习 RecyclerViews,并在看完 this 教程后尝试制作一个。 一切都很顺利,直到最后我在将适配器连接到 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
    }
}

这是我的 RecyclerAdapter

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)
        }
    }

}

改变

 private var adapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() 

private var adapter: RecyclerView.Adapter<RecyclerAdapter.ViewHolder>

在你的MainActivity.kt

private var adapter: RecyclerView.Adapter<RecyclerView.ViewHolder>? = null

适配器变量的数据类型错误 改成这样

private var adapter: RecyclerAdapter? = null

此外,您可以更改为 lateinit 并使其成为不可空类型,而不是将其设为可空类型,因为它将在 onCreate

中初始化

private lateinit var adapter: RecyclerAdapter

您正在使用扩展 RecyclerView.Adapter<RecyclerView.ViewHolder>() 而不是 class RecyclerAdapter 扩展变量。 替换

private var adapter: RecyclerView.Adapter<RecyclerView.ViewHolder>? = null

private lateinit var adapter : RecyclerViewAdapter ?= null