RecyclerView 没有 LayoutManager |科特林

RecyclerView has no LayoutManager | Kotlin

我正在尝试在 RecyclerView 中创建 CardView,但我无法启动它,因为应用程序在启动后崩溃并出现此错误“RecyclerView 没有 LayoutManager”。我已尝试应用其他帖子建议的有关同一问题的修复程序,但到目前为止没有成功。

提前致谢。

HomeActivity.kt

class HomeActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_home)

    // Retrieves data from source
    val arrayList = ArrayList<PreviewCardModel>()
    arrayList.add(PreviewCardModel("Product A","500mg / 1000mg", R.drawable.image, 500))
            arrayList.add(PreviewCardModel("Product D","Sample", R.drawable.image, 5040))
            arrayList.add(PreviewCardModel("Product E","Sample", R.drawable.image, 5500))
            arrayList.add(PreviewCardModel("Product F","Sample", R.drawable.image, 2500))

    val myAdapter = CardAdapter(arrayList, this)
    recyclerView.layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,false)
    recyclerView.adapter = myAdapter

CardAdapter.kt

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.sample.appname.R
import com.sample.appname.model.PreviewCardModel
import kotlinx.android.synthetic.main.preview_card.view.*

class CardAdapter (private val arrayList: ArrayList<PreviewCardModel>, val context: Context) :
    RecyclerView.Adapter<CardAdapter.CardViewHolder>() {

    class CardViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        fun bindItems (model: PreviewCardModel) {
            itemView.previewName.text = model.title
            itemView.previewDesc.text = model.desc
            itemView.previewPrice.text = model.price.toString()
            itemView.previewImage.setImageResource(model.image)
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CardViewHolder {

        val view = LayoutInflater.from(parent.context).inflate(R.layout.preview_card, parent, false)

        return CardViewHolder(view)
    }

    // Returns size of data list
    override fun getItemCount(): Int {
        return arrayList.size
    }
    // Displays data at a certain position
    override fun onBindViewHolder(holder: CardViewHolder, position: Int) {
        holder.bindItems(arrayList[position])
        }
    }

activity_home.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".HomeActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="150dp"
        android:background="@color/browser_actions_title_color"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:orientation="horizontal"
        />
</androidx.constraintlayout.widget.ConstraintLayout>

这是我遇到的错误。

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.sample.appname, PID: 5333
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sample.appname/com.sample.appname.HomeActivity}: android.view.InflateException: Binary XML file line #54 in com.sample.appname:layout/activity_home: RecyclerView has no LayoutManager androidx.recyclerview.widget.RecyclerView{b2c2d71 VFED..... ......I. 0,0-0,0 #7f09016f app:id/recyclerView}, adapter:null, layout:null, context:com.sample.appname.HomeActivity@5dcb507

preview_card.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="120dp"
    android:padding="10sp"
    app:cardCornerRadius="3dp"
    app:cardElevation="3dp"
    app:cardUseCompatPadding="true">

        <ImageView
            android:id="@+id/previewImage"
            android:layout_width="80dp"
            android:layout_height="80dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:src="@drawable/heart"
            android:contentDescription="@string/product_image" />

        <TextView
            android:id="@+id/previewName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/product_name"
            android:textSize="11sp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/previewImage" />

        <TextView
            android:id="@+id/previewDesc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="SAMPLE"
            android:textSize="8sp"
            android:textColor="@color/colorPrimary"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/previewName"
            tools:ignore="SmallSp" />

        <TextView
            android:id="@+id/previewPrice"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:text="@string/samplePrice"
            android:textColor="@color/colorPrimary"
            android:textSize="11sp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintBottom_toBottomOf="parent" />

</androidx.cardview.widget.CardView>

当您为多个 SDK 或方向创建了相同的布局但未在所有布局文件中提及视图时会发生此错误,例如:activity_main.xml(v21) 或 activity_main(land ) 等等。所有布局都应包含具有相同 ID 的所有视图。

修复:我有另一个 activity_home(v21) 布局导致了问题。确保您没有多个会导致问题的布局。它在 v21 版本布局中检测到没有 LayoutManager。