未解决的参考: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.itemViewViewViewHolderonCreateViewHolder跑步进入班级的时间这只是正常现象ViewtextViewTitle该类中没有调用任何字段,这就是您要引用的内容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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章