启动 activity 时膨胀 class android.support.v7.widget.RecyclerView 时出错

Error inflating class android.support.v7.widget.RecyclerView when starting activity

我第一次在 android 中试用 recyleview。 我跟着这个教程 https://developer.android.com/guide/topics/ui/layout/recyclerview

应用很新鲜,只有这个activity。现在的目标只是使用 recyleview 显示字符串列表。 该应用程序编译,但如果我启动它(在虚拟设备 api 26 上),它会因错误而崩溃。

我尝试使用 API 26 和 28 级启动。我也尝试更改支持库的版本,但这完全毁了我的第一个应用程序...

我已经阅读了很多 google 触及问题的结果。但它们似乎都有不同的非常具体的原因。我无法将其应用于我的问题。

我的依赖项:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.core:core-ktx:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
    implementation 'com.android.support:recyclerview-v7:28.0.0'
}

我的Activity:

package com.example.myfirstapp

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView

class MainActivity : AppCompatActivity() {
    private lateinit var recyclerView: RecyclerView
    private lateinit var viewAdapter: RecyclerView.Adapter<*>
    private lateinit var viewManager: RecyclerView.LayoutManager
    private val myArray = arrayOf("Hans","Klaus")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        viewManager = LinearLayoutManager(this)
        viewAdapter = MyAdapter(myArray)
        recyclerView = findViewById<RecyclerView>(R.id.my_recycler_view).apply {
            setHasFixedSize(true)
            layoutManager = viewManager
            adapter = viewAdapter
        }
    }
}
class MyAdapter(private val myDataset: Array<String>) :
    RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
    class MyViewHolder(val textView: TextView) : RecyclerView.ViewHolder(textView)
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyAdapter.MyViewHolder {
        val textView = LayoutInflater.from(parent.context)
            .inflate(R.layout.my_text_view, parent, false) as TextView
        return MyViewHolder(textView)
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        holder.textView.text = myDataset[position]
    }
    override fun getItemCount() = myDataset.size
}

部分错误原因:

Caused by: android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class android.support.v7.widget.RecyclerView
     Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class android.support.v7.widget.RecyclerView
     Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v7.widget.RecyclerView" on path: DexPathList[[zip file "/data/app/com.example.myfirstapp-O0jrBUQE1V6V1rEdCmyGrg==/base.apk", zip file "/data/app/com.example.myfirstapp-O0jrBUQE1V6V1rEdCmyGrg==/split_lib_dependencies_apk.apk", zip file "/data/app/com.example.myfirstapp-O0jrBUQE1V6V1rEdCmyGrg==/split_lib_resources_apk.apk", zip file "/data/app/com.example.myfirstapp-O0jrBUQE1V6V1rEdCmyGrg==/split_lib_slice_0_apk.apk", zip file "/data/app/com.example.myfirstapp-O0jrBUQE1V6V1rEdCmyGrg==/split_lib_slice_1_apk.apk", zip file "/data/app/com.example.myfirstapp-O0jrBUQE1V6V1rEdCmyGrg==/split_lib_slice_2_apk.apk", zip file "/data/app/com.example.myfirstapp-O0jrBUQE1V6V1rEdCmyGrg==/split_lib_slice_3_apk.apk", zip file "/data/app/com.example.myfirstapp-O0jrBUQE1V6V1rEdCmyGrg==/split_lib_slice_4_apk.apk", zip file "/data/app/com.example.myfirstapp-O0jrBUQE1V6V1rEdCmyGrg==/split_lib_slice_5_apk.apk", zip file "/data/app/com.example.myfirstapp-O0jrBUQE1V6V1rEdCmyGrg==/split_lib_slice_6_apk.apk", zip file "/data/app/com.example.myfirstapp-O0jrBUQE1V6V1rEdCmyGrg==/split_lib_slice_7_apk.apk", zip file "/data/app/com.example.myfirstapp-O0jrBUQE1V6V1rEdCmyGrg==/split_lib_slice_8_apk.apk", zip file "/data/app/com.example.myfirstapp-O0jrBUQE1V6V1rEdCmyGrg==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.example.myfirstapp-O0jrBUQE1V6V1rEdCmyGrg==/lib/x86, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)

RecyclerView 现在是 AndroidX 包的一部分。 尝试使用 androidx.recyclerview.widget.RecyclerView 而不是

只需使用此依赖项

 implementation 'androidx.recyclerview:recyclerview:1.1.0-alpha05'

问题可能是因为您使用的是 androidx(请参阅您的导入),但在您的 gradle 文件中您包含了 android.support,因此要解决此问题,您应该进行以下更改:

implementation 'com.android.support:recyclerview-v7:28.0.0'

androidx.recyclerview:recyclerview:1.0.0

还要确保对 xml 文件进行更改,而不是:

<android.support.v7.widget.RecyclerView>

使用

<androidx.recyclerview.widget.RecyclerView>

编辑:

RecyclerView 版本可能会更改,因此请始终检查最新版本