我正在嘗試在 RecyclerView 中創建 CardView,但我無法啟動它,因為應用程式在以“RecyclerView has no LayoutManager”錯誤啟動后崩潰。我嘗試應用其他帖子建議的關于同一問題的修復程式,但到目前為止沒有運氣。
先感謝您。
家庭活動.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
卡配接器.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])
}
}
活動主頁.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>
uj5u.com熱心網友回復:
當您為多個 SDK 或方向創建相同的布局并且沒有在所有布局檔案中提及視圖時,會發生此錯誤,例如:activity_main.xml(v21) 或 activity_main(land) 等。所有布局都應該包含所有具有相同 ID 的視圖。
修復:我有另一個導致問題的 activity_home(v21) 布局。確保您沒有多個會導致問題的布局。它在 v21 版本布局中沒有檢測到 LayoutManager。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/326272.html
