android listview 数据显示bug,各位帮忙看一下?

专注移动开发 2014-10-31 01:14:07
加精
应用情景是这样的,点击底部选项卡,每个选项卡都会刷新listview,如果慢的点击一般不会出现异常,如果快速点击就会报异常,不知道什么原因,有的时候会报这个异常:java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1343)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1354)
还有这个异常:
java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread.​
还有这个异常:
java.lang.IndexOutOfBoundsException: Invalid index 2, size is 1
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
at java.util.ArrayList.get(ArrayList.java:304)
at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:225)
at android.widget.AbsListView.obtainView(AbsListView.java:2260)
at android.widget.ListView.makeAndAddView(ListView.java:1769)
at android.widget.ListView.fillDown(ListView.java:672)
at android.widget.ListView.fillSpecific(ListView.java:1330)
at android.widget.ListView.layoutChildren(ListView.java:1600)
at android.widget.AbsListView.onLayout(AbsListView.java:2111)
at android.view.View.layout(View.java:13775)
at android.view.ViewGroup.layout(ViewGroup.java:4364)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1649)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1507)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1420)
at android.view.View.layout(View.java:13775)
at android.view.ViewGroup.layout(ViewGroup.java:4364)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:13775)
at android.view.ViewGroup.layout(ViewGroup.java:4364)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:13775)
at android.view.ViewGroup.layout(ViewGroup.java:4364)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1649)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1507)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1420)
at android.view.View.layout(View.java:13775)
at android.view.ViewGroup.layout(ViewGroup.java:4364)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:13775)
...全文
2682 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
猫吃鱼cat 2016-12-23
  • 打赏
  • 举报
回复
对按钮做防抖和禁用处理 在没有加载完毕的时候不让用户重新点击 获取数据在子线程中做
白vs淡 2016-11-06
  • 打赏
  • 举报
回复
击底部选项卡,每个选项卡都会刷新listview? 程序能这样写么,每次点击选项卡,只刷新当前选项卡的listview
qq_26763799 2016-11-02
  • 打赏
  • 举报
回复
能想像你问题的出处原因,选卡操作太快,每次请求到的数据个数是不同的,有可能上次请求只有一个数据,但是本次请求到了2条,那么赋值时,数据源还没刷新,所以取第二条数据时报了数组越界 解决办法其实也挺简单,当请求、或者ui界面没有绘制完成时,主屏幕转菊花,不准用户进行下一步的数据请求操作,这样就能避免出现类似问题
sujing022522 2016-11-01
  • 打赏
  • 举报
回复
楼主解决了问题吗?我也遇到和你一样的问题了,想请教一下解决的方法
Faith_full 2014-11-10
  • 打赏
  • 举报
回复
使用listView的时候有没有加优化呢?没加优化的话,加载大量数据的时候会有BUG。
xbaiwgiz 2014-11-10
  • 打赏
  • 举报
回复
IndexOutOfBoundsException 这个挺好解决的吧
专注移动开发 2014-11-07
  • 打赏
  • 举报
回复
引用 23 楼 u010853225 的回复:
问题根源:你点击快速的点击多次选项卡,第一次的处理还没结束,第二次,第三次就开始,他们之间又存在资源公用的问题。 要不你做响应判断,要不做你同步sychronized锁...
响应判断怎么监听,同步sychronized锁应该加在哪个地方?请指点一下。
budworm 2014-11-07
  • 打赏
  • 举报
回复
问题根源:你点击快速的点击多次选项卡,第一次的处理还没结束,第二次,第三次就开始,他们之间又存在资源公用的问题。 要不你做响应判断,要不做你同步sychronized锁...
congatmoon 2014-11-06
  • 打赏
  • 举报
回复
引用 21 楼 wo0123456789wo 的回复:
[quote=引用 20 楼 jxnu707 的回复:] [quote=引用 14 楼 Giberson1 的回复:] 你现在的情况是这样的,你点击快速的点击多次选项卡,第一次的处理还没结束,第二次,第三次就开始,他们之间又存在资源公用的问题。 所以你必须做同步,sychronized下才行
正解! lz是不是每个选项点击后都会启动新的线程?如果是的话,就是涉及线程同步的问题了。我也遇到过这样的问题,一直没有很好的解决办法。。。[/quote] 是的,到目前还没有完全解决这个问题。。。[/quote] 弄个加载等待对话框不可以吗?
专注移动开发 2014-11-05
  • 打赏
  • 举报
回复
引用 20 楼 jxnu707 的回复:
[quote=引用 14 楼 Giberson1 的回复:] 你现在的情况是这样的,你点击快速的点击多次选项卡,第一次的处理还没结束,第二次,第三次就开始,他们之间又存在资源公用的问题。 所以你必须做同步,sychronized下才行
正解! lz是不是每个选项点击后都会启动新的线程?如果是的话,就是涉及线程同步的问题了。我也遇到过这样的问题,一直没有很好的解决办法。。。[/quote] 是的,到目前还没有完全解决这个问题。。。
  • 打赏
  • 举报
回复
文明二流子 2014-11-03
  • 打赏
  • 举报
回复
引用 14 楼 Giberson1 的回复:
你现在的情况是这样的,你点击快速的点击多次选项卡,第一次的处理还没结束,第二次,第三次就开始,他们之间又存在资源公用的问题。 所以你必须做同步,sychronized下才行
正解! lz是不是每个选项点击后都会启动新的线程?如果是的话,就是涉及线程同步的问题了。我也遇到过这样的问题,一直没有很好的解决办法。。。
_周星星 2014-11-03
  • 打赏
  • 举报
回复
Giberson1 2014-11-01
  • 打赏
  • 举报
回复
你现在的情况是这样的,你点击快速的点击多次选项卡,第一次的处理还没结束,第二次,第三次就开始,他们之间又存在资源公用的问题。

所以你必须做同步,sychronized下才行
Giberson1 2014-11-01
  • 打赏
  • 举报
回复
你必须做限制,点击完一次后,等到响应后,第二次点击才生效。
专注移动开发 2014-11-01
  • 打赏
  • 举报
回复
引用 14 楼 Giberson1 的回复:
你现在的情况是这样的,你点击快速的点击多次选项卡,第一次的处理还没结束,第二次,第三次就开始,他们之间又存在资源公用的问题。 所以你必须做同步,sychronized下才行
sychronized同步多线程对象吗,还是。。?
a220315410 2014-11-01
  • 打赏
  • 举报
回复
修改数据后,没有即使调用Adapter.notifyDataChanged()?
ZH9624645 2014-11-01
  • 打赏
  • 举报
回复
ios-ios 2014-10-31
  • 打赏
  • 举报
回复
2531701555 不是保密的就发来瞧瞧。
qq_22784349 2014-10-31
  • 打赏
  • 举报
回复
什么样BBBBBBBBBBBB
加载更多回复(10)

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧