我正在尝试创建一个recyclerView,但是当我尝试引用我的textView时,出现一个错误,提示“ Unresolved Reference:textViewTitle”,我尝试了很多方法,但我做不到,感谢您的明智帮助。
class RecyclerAdapter(private val userList: ArrayList<Sitios> = ArrayList()) :
RecyclerView.Adapter<RecyclerAdapter.ViewHolder>() {
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.card_view, parent, false)
return ViewHolder(v)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
//Unresolved reference: textViewTitle
holder.itemView.textViewTitle.text = userList[position].description
}
override fun getItemCount(): Int = userList.size
holder.itemView
是View
您ViewHolder
在onCreateViewHolder
跑步时进入班级的时间。这只是正常现象View
,textViewTitle
该类中没有调用任何字段,这就是您要引用的内容holder.itemView.textViewTitle
-这就是为什么它表示引用未解析的原因
您可能想要做的是在的层次结构中找到TextView
具有该ID的IDitemView
,因此您需要执行
holder.itemView.findViewById<TextView>(R.id.textViewTitle)
或任何ID。但是通常,人们会把字段放在ViewHolder
类中,通过一次查找来设置它们,然后您就可以像尝试做的那样访问它们:
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
lateinit var textViewTitle : TextView
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.card_view, parent, false)
// or you could make the TextView a val in the ViewHolder's constructor and just pass it in instead of setting it after creation
val holder = ViewHolder(v)
holder.textViewTitle = v.findViewById<TextView>(R.id.textViewTitle)
return ViewHolder(v)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
// now the reference is a field on the ViewHolder
holder.textViewTitle.text = userList[position].description
}
这样比较好,因为onBindViewHolder
每次新项目滚动到视图中时都会运行,所以findViewById
当您只想执行一次时,您不想做很多事情
如果您以现场方式进行操作(例如在此进行操作),而不是使视图引用构造函数参数(当您有几个构造函数参数时可能会变得凌乱),则可以这样编写:
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.card_view, parent, false)
return ViewHolder(v).apply {
textViewTitle = v.findViewById(R.id.textViewTitle)
// and any other views you need to set up
}
}
看起来很整洁,尤其是有几个视图!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句