weixin_51310196 2021-12-21 11:22 采纳率: 50%
浏览 17
已结题

android开发 ListView下拉刷新 报 java.lang.IndexOutOfBoundsException: Index: 3, Size: 1

项目是一个预约列表,下拉刷新功能
报错信息

java.lang.IndexOutOfBoundsException: Index: 3, Size: 1
at java.util.ArrayList.get(ArrayList.java:411)
at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:225)
at android.widget.AbsListView.obtainView(AbsListView.java:2371)
at android.widget.ListView.makeAndAddView(ListView.java:1970)
at android.widget.ListView.fillDown(ListView.java:704)
at android.widget.ListView.fillGap(ListView.java:668)

查看日志,发现预约列表原先只要1条数据,下拉刷新之后数据有4条,自己想一下,觉得可能是UI更新了,adapter中的数据没有更新,然后加上tkAdapter.notifyDataSetChanged(),刷新数据。
因为是客户的用户那边出现的bug,没有具体的操作步骤,目前我没有复现出,客户那边也不能配合我复现,所以不能百分之百肯定是不是这个问题。百度出来的解答,报错信息也是不一致的,有没有人能帮帮我
  • 写回答

1条回答 默认 最新

  • JioWu 2021-12-21 11:39
    关注

    如果不能确定具体报错位置,然后前段又需要改的话 那就严谨一点 无论任何时候去取列表集合里面的数据 判断一些index是否小于集合长度
    然后 你说的ui更新了 adapter中的数据源没有更新 那你也不能直接调用tkAdapter.notifyDataSetChanged() 这个方法是当数据源更新的时候 去告诉ListView的adapter需要更新ui的 而不是更新数据源的 所以在此之前先要确定数据源是否更新了 这个取决于你的数据源是如何设置给adapter的 是直接 this.data=data (注:data为数据源集合) 还是this.data=this.data.addAll(newData); 这个意思你懂撒

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月19日
  • 已采纳回答 2月11日
  • 创建了问题 12月21日

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办