ListView遇到的坑
来源:互联网 发布:姜维 知乎 编辑:程序博客网 时间:2024/05/18 07:43
1. adapter.notifyDataSetChanged();
adapter中的数据有变化时必须第一时间使用adapter.notifyDataSetChanged();
更新UI展示的数据。
2. adapter.notifyDataSetInvalidated();
ListView依赖的adapter的定义形式一般是:
listView.setAdapter(adapter);
实际项目中往往会出现改变ListView的依赖adapter而执行listView.setAdapter(adapter);
,此时必须提前执行adapter.notifyDataSetInvalidated();
将原数据源设置为无效,否则有些型号的手机会出现Bug,下面是在360N4出现的bug
分析:
日志说,我们用了Header导致数组越界,但事实上我没有使用Header。
打个比方,adapter存储数据的容器我们叫瓶子,adapter中的数据我们比作水,这是由于adapter中装的水没有变,此时又重新定义adapter导致的盛水的瓶子变了,很可能新瓶子无法盛下所有的水从而导致溢出。
此分析纯属假想,没有证据证明,如果谁有更好的解释请在评论区探讨
3. 什么时候需要使用listView.setSelection(int position);
来跳转到指定的位置
如果通过
listView.setAdapter(adapter);
重设置了ListView的依赖adapter,想要页面停留来原来的地方就要使用listView.setSelection(int position);
来定位如果仅仅是通过
adapter.append(data);
或者adapter.delete(app.getId());
(自定义的添加和删除adapter中数据的方法),改变了adapter中的数据,只要及时通过adapter.notifyDataSetChanged();
更新UI即可,还会停留在原位置
4. listView.setSelection(int position);
跳转失效
这个方法只有在ListView完成数据加载之后调用才会生效
否则,网络上的解决方法:
1. 让listview重新获得焦点listView.requestFocusFromTouch();
2. listview.post(new Runnable() { })在runnable中执行setSelection方法
3. adapter.notifyDataSetChanged();
刷新之后执行setSelection方法
另外还有带有动画效果的跳转,listView.smoothScrollToPosition(int position);
注意事项一样。
- ListView遇到的坑
- 关于listView的addFootView遇到的坑
- android中Listview+GridView遇到的坑
- antd-mobile中listView遇到的坑
- listView遇到的问题
- 解决ListView嵌套ListView遇到的问题
- ListView使用遇到的问题
- listview addheadview() 遇到的问题
- ListView嵌套GridView时遇到的一些坑
- 说一下我在listview上遇到的坑
- ListView嵌套RecyclerView遇到的一些坑以及解决办法
- 当scrollview 遇到gridview,listview产生的坑
- 第一行代码第二版ListView的使用(listView复用遇到的坑)
- listview中自定义baseadapter遇到的问题
- ListView中遇到的小错误
- 美化listview时遇到的问题
- Android中扩展ListView遇到的问题
- 使用ListView时遇到的问题
- Linux基础知识
- bzoj3510首都 LCT维护子树信息+启发式合并
- JavaScripe 中的 消息列队
- HTTP 报文
- mt7688 openwrt之lua初探
- ListView遇到的坑
- pullToRefreshListView
- js二维数组转换json
- 求两个字符串的编辑距离
- shell读取文件的每一行
- angularJS——高级筛选
- 【笔记】tarjian算法 求强连通分量
- AlexNet -翻译
- 支持IE浏览器的渐变效果