Android网盘开发最不可避免的就是在ListView 中关于CheckBox 滑动问题
这与ListView 的缓存机制有关。。
问题: 你不断的上下滑动,CheckBox勾中项就会混乱,即跑到别的item中
上网搜了很多资料,(大同小异)解决这一问题。
而我做这个网络网盘就用了给传入进来的List<Map<String,Object>> mData 设置标志
也就是在item被点击是记录被点击的position
// 如果是文件夹则打开
if ((Integer) (mData.get(position).get("icon")) == R.drawable.icon_folder) {mDir = (String) mData.get(position).get("info"); mData = getData(); // 点击目录时进入子目录 MyAdapter adapter = new MyAdapter(getApplicationContext(),mData); list.setAdapter(adapter); tv_path.setText("目前路径:" + mDir); } else { CheckBox check = ((MyAdapter.ViewHolder) view.getTag()).checkbox; if (check.isChecked()) { // 判断CheckBox是否选择 // ,如果是则取消并修改mData中上传为false check.setChecked(false); mData.get(position).remove("isUpload"); mData.get(position).put("checkTag", false); // 记录文件是否被点击 标记为上传 mData.get(position).put("isUpload", "NO"); } else { check.setChecked(true); mData.get(position).remove("isUpload"); mData.get(position).put("checkTag", true); mData.get(position).put("isUpload", "YES"); } }
上面的checkTag是关键,设置点击的表示,在初始化时,给每个item,设置checkTag,false , 也就是Map<String, Object>对象。
而在Adapter(extends BaseAdapter) 就很简单了,设置标记值,这样每一个mData在position上都有明确的checkTag值,记录你是否点击过
if (String.valueOf(mData.get(position).get("isUpload")).equals("YES")) { // 如果是 则checkbox显示为Checked // 防止listview缓存机制导致CheckBox是否选中错乱 holder.checkbox.setChecked((Boolean) mData.get(position).get("checkTag")); } else { holder.checkbox.setChecked( (Boolean) mData.get(position).get("checkTag")); }
相关推荐
解决ListView嵌套CheckBox滑动时CheckBox选中状态错乱问题,以及listview中事件点击冲突问题;一个简单的小Demo;
获取c# ListView CheckBox 索引值
ListView CheckBox 全选 取消 删除
遇到以下问题的都可以看看: 1、ListView item中加入checkbox后onListItemClick 事件无法触发。 原因:checkbox的优先级高于ListItem于是屏蔽了ListItem的单击事件。 解决方案:设置checkbox的android:focusable=...
在delphi中使用listview控件,启用checkbox选项后,默认是多选,此示例实现单选功能,在Delphi7下测试通过。
在ListView中添加CheckBox,实现多选条目
知识点:1、解决listView滚动时checkBox的选择状态会发生变化(絮乱);2、ListView的Item长按,点击时间并存,实现同一UI控件多需求响应各类事件;3、点击ListViewItem选中响应Item里的CheckBox;4、计算选中的项数...
listview复用历史对象后,选中的checkbox滑动后会出现位置的错乱,这里巧用map集合解决这个问题,和checkbox的全部选中。
WPF中ListView添加CheckBox列
真正可用的,无误的,不存在选择异常的android listview与checkbox结合的源码,具有单选,多选,全选,取消全选,删除,单击选择,显示选择结果功能。
完美解决了ListView和CheckBox的焦点冲突及CheckBox的复用问题,讲解了CheckBox的全选、反选、删除功能及在下拉刷新和下拉加载中如何保存CheckBox的先前的选中状态
android 解决ScrollView和listView嵌套冲突问题(保证在ScrollView中滑动listView只响应listView的滑动)
主要是解决主要是解决我以前的一篇博客仿微信添加群聊界面——addView里listview和checkbox混乱的问题,详细请看我的博客http://blog.csdn.net/jiang89125/article/details/50379364
Android 防京东侧滑筛选,ListView+CheckBox滑动冲突,ListView+ GridView显示一行问题解决,接口回调传递数据等
listview+checkbox乱序问题
Android应用源码之listview快速滑动,修改默认的滑动条_Android
listview快速滑动,修改默认的滑动条
Android应用源码之listview快速滑动,修改默认的滑动条.zip
有源码有实例,delphi Listview复选框checkbox实现单选的功能,代码很精简实用,测试完美!
listview的滑动特效,酷炫