Android RecyclerView中为TextView添加序号时出现报错求助
解决RecyclerView中TextView添加序号的报错问题
嗨,我来帮你排查下问题所在,你的代码里有两个关键错误导致了报错:
1. 完全多余的for循环
onBindViewHolder方法本身就是为每个列表item单独执行绑定逻辑的,你在这里加了一个遍历整个列表的for循环,不仅完全没必要,还会导致每个item最后都会被设置成列表的总长度(循环结束后i等于listitems2.size()),完全达不到逐个设置序号的目的,还浪费性能。
2. TextView的setText(int)用错了
TextView的setText(int)方法是用来加载字符串资源ID的(比如R.string.hello),而不是直接显示数字。你直接传入i这个int类型的序号,系统会去查找对应ID的资源,找不到就会抛出Resources$NotFoundException,这就是你报错的核心原因。
正确的写法应该是这样:
直接利用RecyclerView提供的position参数(它是当前item的索引,从0开始),把序号转成字符串后设置给TextView就行:
@Override public void onBindViewHolder(final RViewHolder holder, final int position) { final commdtylist listitem = listitems2.get(position); // position从0开始,所以+1得到从1开始的序号,转成字符串设置 holder.comm_code.setText(String.valueOf(position + 1)); // 这里可以继续设置listitem的其他数据,比如商品名称之类的 // holder.comm_name.setText(listitem.getCommodityName()); }
额外说明:
- 如果你的列表有头部视图或者其他特殊布局,需要根据实际情况调整序号的计算方式(比如跳过头部的position),但普通列表用上面的代码就足够了
- 永远不要在
onBindViewHolder里做循环或者耗时操作,这个方法会在列表滚动时频繁调用,会严重影响列表的流畅性
内容的提问来源于stack exchange,提问作者user9427911
相关产品推荐
相关产品推荐

