Android RecyclerView Adapter中setText()方法报错问题求助
RecyclerView适配器setText报错修复方案
你遇到的报错和setText()方法本身无关,是代码编写顺序和控件绑定的问题,参考报错示意图:
参考示意图
核心错误点
- 变量使用顺序错误:
addedON字符串是在调用holder.tvAddedOn.setText(addedON)之后才声明赋值的,Java按代码顺序执行,未提前声明的变量无法被调用,编译器会直接抛出找不到符号错误。 - 可能存在控件绑定错误:需要确认ViewHolder类中的
tvNote、tvAddedOn两个成员变量类型为TextView,且已经通过findViewById正确匹配布局文件中对应ID的控件,如果误绑定为其他类型View(如布局容器、图片控件),会触发类型不匹配报错。
修复后可直接运行的代码
修正后的onBindViewHolder方法
public void onBindViewHolder(@NonNull NoteHolder holder, int position) { NoteModel noteModel = mNoteList.get(position); holder.tvNote.setText(noteModel.getNote()); // 先完成时间字符串的生成,再调用setText设置 SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm", Locale.getDefault()); String addedON = dateFormat.format(new Date(noteModel.getAddedOn())); holder.tvAddedOn.setText(addedON); }
正确的ViewHolder参考实现
如果你的控件绑定有误,可以参考下面的写法修正:
public class NoteHolder extends RecyclerView.ViewHolder { TextView tvNote; TextView tvAddedOn; public NoteHolder(@NonNull View itemView) { super(itemView); // 绑定布局中对应ID的TextView控件 tvNote = itemView.findViewById(R.id.tv_note); tvAddedOn = itemView.findViewById(R.id.tv_added_on); } }
优化提示:
SimpleDateFormat不需要每次绑定列表项都新建实例,可以将其定义为适配器的成员变量,在适配器构造方法中初始化一次全局复用,减少不必要的内存开销。另外创建SimpleDateFormat时传入Locale.getDefault()参数,可以避免不同系统语言环境下的时间格式显示异常。
内容的提问来源于stack exchange,提问作者Divyangi Rathore
相关产品推荐
相关产品推荐

