问题描述
我正在尝试创建一个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的itemView
,因此您需要这样做
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,false)
return ViewHolder(v).apply {
textViewTitle = v.findViewById(R.id.textViewTitle)
// and any other views you need to set up
}
}
看起来很整洁,尤其是有几个视图!