android 中listview集成checkbox后使用的一些发现
2011-05-31 11:53
387 查看
listview中集成textview和checkbox应该是很普遍的现象,现在手头的项目在实现的过程中出现一个问题,就是checkbox的选中状态在关东新增后出现的那些checkbox 变成和滚动显示之前的那些选中状态一样了 。
通过跟踪后台的处理方法,发现扩展BaseAdapter后 getView 方法中的一些以前没有注意的情况,当进入第一次进入 listview 的页面的时候,初始化输出是如下的
05-31 02:04:27.682: DEBUG/adp(763): view 0 is null
05-31 02:04:27.714: DEBUG/adp(763): view 1 is android.widget.RelativeLayout@44f614d0
05-31 02:04:27.723: DEBUG/adp(763): view 2 is android.widget.RelativeLayout@44f614d0
05-31 02:04:27.723: DEBUG/adp(763): view 3 is android.widget.RelativeLayout@44f614d0
05-31 02:04:27.733: DEBUG/adp(763): view 4 is android.widget.RelativeLayout@44f614d0
05-31 02:04:27.733: DEBUG/adp(763): view 5 is android.widget.RelativeLayout@44f614d0
05-31 02:04:27.743: DEBUG/adp(763): view 6 is android.widget.RelativeLayout@44f614d0
05-31 02:04:27.743: DEBUG/adp(763): view 7 is android.widget.RelativeLayout@44f614d0
05-31 02:04:27.782: DEBUG/adp(763): view 0 is android.widget.RelativeLayout@44f614d0
05-31 02:04:27.794: DEBUG/adp(763): view 1 is null
05-31 02:04:27.823: DEBUG/adp(763): view 2 is null
05-31 02:04:27.843: DEBUG/adp(763): view 3 is null
05-31 02:04:27.864: DEBUG/adp(763): view 4 is null
05-31 02:04:27.884: DEBUG/adp(763): view 5 is null
05-31 02:04:27.903: DEBUG/adp(763): view 6 is null
从这段log输出可以看到1-6应该是进行过初始化的了,至于后面为什么会变成 null,我也没有去深入研究呢。然后随便选中几个checkbox
当我继续向下滚动的时候 下面的checkbox和上面的postion相差不多的位置上 都是被选中状态的,给我的感觉就是这钱的那些组件被复用了 ,但是复用的规则 因为没有看人家的源代码,所以现在也不清楚 但是鉴于这种情况 我只好采用手动初始化checkbox状态,我在扩展的adapter里面多用了
private HashSet checkedset=new HashSet();
getView的时候在最后进行一次初始化
holder.compCheck.setChecked(checkedset.contains(holder.compCheck.getTag()));
在进行初始化后,能够保证只显示正确的勾选状态了,至于这种情况的原因,如果有人知道可以告诉我,我有时间也会自己找赵答案看看的。
通过跟踪后台的处理方法,发现扩展BaseAdapter后 getView 方法中的一些以前没有注意的情况,当进入第一次进入 listview 的页面的时候,初始化输出是如下的
05-31 02:04:27.682: DEBUG/adp(763): view 0 is null
05-31 02:04:27.714: DEBUG/adp(763): view 1 is android.widget.RelativeLayout@44f614d0
05-31 02:04:27.723: DEBUG/adp(763): view 2 is android.widget.RelativeLayout@44f614d0
05-31 02:04:27.723: DEBUG/adp(763): view 3 is android.widget.RelativeLayout@44f614d0
05-31 02:04:27.733: DEBUG/adp(763): view 4 is android.widget.RelativeLayout@44f614d0
05-31 02:04:27.733: DEBUG/adp(763): view 5 is android.widget.RelativeLayout@44f614d0
05-31 02:04:27.743: DEBUG/adp(763): view 6 is android.widget.RelativeLayout@44f614d0
05-31 02:04:27.743: DEBUG/adp(763): view 7 is android.widget.RelativeLayout@44f614d0
05-31 02:04:27.782: DEBUG/adp(763): view 0 is android.widget.RelativeLayout@44f614d0
05-31 02:04:27.794: DEBUG/adp(763): view 1 is null
05-31 02:04:27.823: DEBUG/adp(763): view 2 is null
05-31 02:04:27.843: DEBUG/adp(763): view 3 is null
05-31 02:04:27.864: DEBUG/adp(763): view 4 is null
05-31 02:04:27.884: DEBUG/adp(763): view 5 is null
05-31 02:04:27.903: DEBUG/adp(763): view 6 is null
从这段log输出可以看到1-6应该是进行过初始化的了,至于后面为什么会变成 null,我也没有去深入研究呢。然后随便选中几个checkbox
当我继续向下滚动的时候 下面的checkbox和上面的postion相差不多的位置上 都是被选中状态的,给我的感觉就是这钱的那些组件被复用了 ,但是复用的规则 因为没有看人家的源代码,所以现在也不清楚 但是鉴于这种情况 我只好采用手动初始化checkbox状态,我在扩展的adapter里面多用了
private HashSet checkedset=new HashSet();
getView的时候在最后进行一次初始化
holder.compCheck.setChecked(checkedset.contains(holder.compCheck.getTag()));
在进行初始化后,能够保证只显示正确的勾选状态了,至于这种情况的原因,如果有人知道可以告诉我,我有时间也会自己找赵答案看看的。
相关文章推荐
- android listview 使用checkbox问题
- Android 在ListView中使用CheckBox,实现增加联系人的功能
- Android 之自定义CheckBox结合ListView使用
- Android中使用ListView以及在Listview中添加CheckBox时若干问题
- Android解决ListView中使用EditText所遇到的一些冲突
- android listview 使用checkbox问题
- android开发中ListView与CheckBox的混合使用
- 当Android的API升级到19以后,发现一些使用Provider时抛 java.lang.SecurityException: Permission Denial: opening provide
- android项目 之 来电管家(2) ----- ListView+CheckBox的使用
- ANDROID笔记:ListView和CheckBox的简单使用
- android ListView在使用中碰得一些问题的解决办法
- Android 中使用ListView和CheckBox进行批量操作
- Android 使用CheckBox实现ListView自定义单选
- Android中ListView中使用CheckedTextView和CheckBox的理解
- Android 中 在listview 中使用checkbox 遇到的选择问题
- 在使用AndroidSwipeLayout发现的一些问题
- android 在listView中如果需要使用复选框功能,强烈建议使用图片作为背景代替checkBox。亲测好用
- Android秒级编译方案-Freeline集成和使用过程中的一些问题和解决方案
- Android MVP模式 ListView中嵌入checkBox的使用
- Android 中使用ListView和CheckBox进行批量操作