无法在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
相关产品推荐
相关产品推荐

