未解决的参考:textView

问题描述

我正在尝试创建一个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.itemViewView运行时传递给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
    }
}

看起来很整洁,尤其是有几个视图!

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...