【发布时间】:2021-11-09 02:53:15
【问题描述】:
我知道这个问题已经发布,但似乎都发布在 java 代码中。我只是想实现一个小例子recyclerView。不知道我做错了什么,任何见解都会很棒,TIA。
MainActivity.kt
package com.wildcardev.androidtest1
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import androidx.recyclerview.widget.LinearLayoutManager
import com.wildcardev.androidtest1.adapters.RecyclerAdapter
import com.wildcardev.androidtest1.databinding.ActivityMainBinding
import com.wildcardev.androidtest1.models.TestDataObj
fun addDataToList(arrayList:ArrayList<TestDataObj>): ArrayList<TestDataObj>{
arrayList.add(TestDataObj("tes1", "test2", "test3"))
arrayList.add(TestDataObj("test2", "testt2", "testt2"))
arrayList.add(TestDataObj("tes12", "test22", "test32"))
arrayList.add(TestDataObj("tes13", "test23", "test33"))
arrayList.add(TestDataObj("tes14", "test24", "test34"))
arrayList.add(TestDataObj("tes15", "test25", "test35"))
return arrayList
}
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
val testList: ArrayList<TestDataObj> = ArrayList()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(R.layout.activity_main)
val list = addDataToList(testList)
Log.d("TEST1","$list")
Log.d("TEST1","${binding.recyclerView}")
binding.recyclerView.layoutManager = LinearLayoutManager(this@MainActivity)
val adapter = RecyclerAdapter(list)
binding.recyclerView.adapter = adapter
}
}
TestDataObj.kt 包 com.wildcardev.androidtest1.models
data class TestDataObj(
val title: String,
val description: String,
val date: String
)
RecyclerAdapter.kt 包 com.wildcardev.androidtest1.adapters
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.wildcardev.androidtest1.R
import com.wildcardev.androidtest1.models.TestDataObj
class RecyclerViewHolder(view: View): RecyclerView.ViewHolder(view){
var title: TextView = view.findViewById(R.id.title)
var description: TextView = view.findViewById(R.id.description)
var date: TextView = view.findViewById(R.id.date)
}
class RecyclerAdapter(private var list: ArrayList<TestDataObj>): RecyclerView.Adapter<RecyclerViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerViewHolder {
Log.d("onCreateView", "INHOLDERcreate")
val view = LayoutInflater.from(parent.context).inflate(R.layout.activity_main, parent, false)
return RecyclerViewHolder(view)
}
override fun onBindViewHolder(holder: RecyclerViewHolder, position: Int) {
Log.d("ADAPTER", "INBINDfunc")
val item = list[position]
holder.title.text = item.title
holder.description.text = item.description
holder.date.text = item.date
}
override fun getItemCount(): Int {
Log.d("COUNT",".getItemCountcalled")
return list.size
}
}
【问题讨论】:
-
与 Kotlin/Java 无关。您需要使用
binding.root而不是R.layout.activity_main调用setContentView()。 developer.android.com/topic/libraries/view-binding#activities -
很好,仍然收到该错误。我也修改为“TextView?”在类 RecyclerViewHolder
-
好吧,这并不是一个真正的错误,但如果你仍然得到它,那么你有一些其他的
RecyclerView正在布置,没有附加Adapter,但这里没有足够的信息以便我们能够告诉您更具体的信息。 -
谢谢,我认为代码中可能存在明显错误。感谢您指出使用“binding.root”