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日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装