避免 ListView 的 控件重用机制 导致视图/数据混乱
来源:互联网 发布:淘宝做什么产品 编辑:程序博客网 时间:2024/05/22 03:46
控件视图重用,就是当convertView不为空的时候直接重新使用convertView从而减少了很多不必要的View的创建,然后加载数据。当列表往上下拖时,那些被拖出屏幕外的控件会重用。当触发器被触发时,触发该控件的OnCheckedChanged处理程序,而这个处理程序指向的数据项是前一次绑定的btnList中button的数据,这样就可能导致视图混乱。
【错误案例】:
(这里使用ExpandableListView expandableListView;Button在Group中,checkBox在child中,点击child的checkBox 会触发checkedChanged 操作,改变Group 的Button 的内容。)
BaseExpandableListAdapter中的getGroupView如下:
ChildView中checkBox 的OnCheckedChangedListener 的onChenckedChanged() 如下:
【错误案例演示】:
一开始生产所有Group时,btnList 中的0、1、2、3....分别与 group Item 的0、1、2、3...对应;
这时对btnList的0元素Button的操作,是没问题的:
但是,当第一个item的控件视图被移出当前界面时,后面新的item会将其利用起来,导致新的item莫名其妙地被改变了:
随着不断的上下翻动,item的控件视图将愈发混乱。
【解决方案一】:每次都new新的控件视图。(缺点:这浪费你懂得)
【解决方案二】:控件重用 + 通知刷新
点击checkBox时没必要一定要获取控件视图,并改变它。
可以在点击checkBox时,仅仅改变内部数据结构的内容。系统在显示控件时,会自动将item与控件绑定,至于重用了哪控件,不用你操心。我们只要做好绑定过程的 数据的填充 工作:用内部数据结构的内容去填充(更新)绑定的控件视图。
这样,当点击checkBox时,改变内部数据结构的内容,并通知刷新即可。
BaseExpandableListAdapter中的getGroupView如下:
ChildView中checkBox 的OnCheckedChangedListener 的onChenckedChanged() 如下:
【解决方案三】:控件重用 + 获取被绑定的控件
如果你硬是不想用 notifyDataSetChanged() 方法的话,就这样:
getChildAt()只能获取当前界面可见的视图。
- 避免 ListView 的 控件重用机制 导致视图/数据混乱
- ListView的重用机制
- 【进阶android】ListView源码分析——ListView的重用视图机制
- UItableViewCell 重用导致控件多次加载 去除cell重用导致 视图控件多次加载问题
- UItableViewCell 重用导致控件多次加载 去除cell重用导致 视图控件多次加载问题(转)
- 在ListView控件中添加head视图为ViewPager时遇到的问题是滑动出现混乱。
- ,避免造成混乱。 设想1:拿ListView为例,如果ListView的ItemView复用机制,所有的ItemVie,避免造成混乱。 设想1:拿ListView为例,如果ListView的Ite
- ListView的Intent跳转详情页, 滑动与点击Position错乱导致数据混乱问题解决
- 总结——关于cell重用导致数据(控件状态)重复的解决方案
- listView重用机制
- iOS cell重用机制导致数据重叠显示解决方法
- Android ListView 数据混乱
- ListView匹配数据混乱
- iOS 避免cel重用机制
- iOS 避免cel重用机制
- Android ListView避免在GetView时数据发生变化导致找不到元素的Bug
- ListView复用机制导致数据错乱
- ListView中显示不同的视图布局实现重用
- 程序员职业进阶学习之路
- storyboard的使用
- golang 中bufio包的用法
- 关于新浪微博SDK在代理服务网络环境中遇到的问题 weibo4j.model.MySSLSocketFactory.createSocket
- Eclipse中的Android内容辅助
- 避免 ListView 的 控件重用机制 导致视图/数据混乱
- 9种基本算法_分治
- C语言之关系运算符、逻辑运算符、三目运算符
- c# 获取当前活动窗口句柄,获取窗口大小及位置
- 排序算法总结
- Spring3 MVC核心类DispatcherServlet与接口的介绍
- java集合体系
- HDU1064 Financial Management 【water】
- 使用 SCons 轻松建造程序