You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法在RecyclerView的onBindViewHolder方法中使用TextView的.text属性

问题解决:RecyclerView无法通过ViewHolder设置TextView文本

问题原因

代码里存在命名冲突:MyviewHolder类中自定义的itemView变量,和RecyclerView.ViewHolder自带的itemView属性重名了。在onBindViewHolder中调用holder.itemView时,实际访问的是父类的itemView(整个列表项的根View),而非你通过findViewById获取的TextView,自然无法设置text属性。

修复方案

把MyviewHolder里的TextView变量名修改为非冲突名称,比如contactTv,再在onBindViewHolder中调用该变量设置文本:

class CustomAdapter(val itemList: Array<String>) : RecyclerView.Adapter<CustomAdapter.MyviewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyviewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.contact_layout, parent, false)
        return MyviewHolder(view)
    }

    override fun onBindViewHolder(holder: MyviewHolder, position: Int) {
        val item = itemList[position]
        holder.contactTv.text = item
    }

    override fun getItemCount(): Int {
        return itemList.size
    }

    class MyviewHolder(val view: View) : RecyclerView.ViewHolder(view) {
        val contactTv = view.findViewById<TextView>(R.id.contactItem)
    }
}

额外优化建议

  • 推荐使用Kotlin视图绑定(View Binding)替代findViewById,既避免命名冲突,也能减少空指针风险,代码更简洁。
  • 确认contact_layout布局文件中,确实存在id为contactItem的TextView组件,且组件类型正确。

内容的提问来源于stack exchange,提问作者visal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 18:12:29