首页 > 代码库 > listview全选后无法删除不在显示区的item
listview全选后无法删除不在显示区的item
============问题描述============
本人新手,学习过程中遇到如下问题:
listview中的item数量超出了显示区域,如:一共20个item,显示区能显示10个。当点全选按钮后直接点删除,只能删掉显示区的那10个。当全选按钮点击后,滑动屏幕,这时会发现所有的20个checkbox都勾选了,这时再点删除,则20个全都能够正常删除。
请问高人这个要怎么破?问题出在那?viewholder?现在有点迷糊了。
============解决方案1============
listview加载list1,list1里有18条数据
点全选 - 点删除,代码里做lis1t清空操作
点全选 - 点前10条中的1条 - 点删除,代码里把10条中的那1条item保存下来放到list2中,清空list1,listview加载list2(当然这只是一种解决方法,还有各种其他的方法)
这样行吗
============解决方案2============
public View getView(int position, View convertView, ViewGroup parent) {
这里的position只是显示的纪录的索引,所以你下面的deleteMap中没有放入未显示的纪录的索引。
if (holder.checkbox.isChecked() == true) {
deleteMap.put(position, (String)holder.id.getText());
} else {
deleteMap.remove(position);//把之前选中之后又取消的从hashmap中清除
}
============解决方案3============
上面这段 if (holder.checkbox.isChecked())应该算是“逻辑”的部分,但是要怎么把它从“显示”中分离出来呢
A: 根本不必要检查checkBox 的状态,checkBox也是个View,只是显示用的,不要去检查它的check状态。check状态建议保存在Adapter内,而不是依赖控件是否checked。
您是否有相关的简单例子能给我看看呢?
A:androidSDK自带sample有很多例子,如果有一定能力了也可以去读读android的源码。
另外对于下面的代码,应该算是“逻辑”还是“显示”啊?
if(checkVisible)
holder.checkbox.setVisibility(View.VISIBLE);
else
holder.checkbox.setVisibility(View.GONE);
A: 这部分适合在getView处理,只是checkVisible要改成check实际保存状态。
个人建议而已,大家共同学习,共同进步。对于不理解的建议先看看ListView的工作流程。
listview全选后无法删除不在显示区的item
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。