Android CheckBox实现多选、全选、反选功能
来源:互联网 发布:淘宝如何取消超级推广 编辑:程序博客网 时间:2024/06/05 09:29
CheckBox实现多选、全选、反选功能
前不久项目中用到了多选列表功能,在这里讲述一下实现思路以及需要注意的地方, 不足之处,敬请谅解!
实现多选功能列表一般可以用ListView 或RecyclerView嵌套CheckBox实现,这里用的是ListView。
废话不多,先上图
先说一下多选实现思路
首先需要一个Map集合用于存储每一个条目的选中状态。选中哪个条目,则把该条目的位置添加进集合,并设置key为true,删除则设置Map集合中对应的位置的key为false。最后提交的时候,遍历map集合,即可得到所有选中的条目。
全选、反选功能实现思路比较简单
全选是把Map集合中的key全部设置为true即可,而反选则需要遍历Map集合,判断每个key的状态并设置为相反的状态。
下面直接上代码
XML布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/multi_btn_all" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="全选" /> <Button android:id="@+id/multi_btn_opposite" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="反选" /> <Button android:id="@+id/multi_btn_submit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="提交" /> </LinearLayout> <ListView android:id="@+id/multi_lv_listview" android:layout_width="match_parent" android:layout_height="match_parent"> </ListView></LinearLayout>
MultiSelectActivity
创建集合存放数据
//用于存储条目数据 private List<String> list = new ArrayList<>();//用户存储条目的选择状态 private Map<Integer, Boolean> isCheck = new HashMap<>(); //用于存放已选择的条目 private List<Integer> selectList = new ArrayList<>();
初始化数据
for (int i = 0; i < 100; i++) { //给集合中设置50条数据 list.add("设置第" + i + "条数据"); //初始化所有条目为未选中状态 isCheck.put(i, false);}
给条目设置数据
//设置数据if (multiSelectAdapter == null) { multiSelectAdapter = new MultiSelectAdapter(list, isCheck, MultiSelectActivity.this); listView.setAdapter(multiSelectAdapter);} else { multiSelectAdapter.notifyDataSetChanged();}
接下来看一下适配器 MultiSelectAdapter.class
首先通过构造函数设置数据
public Map<Integer,Boolean> isCheck ;private List<String> list;private Context context;//通过构造函数获取数据public MultiSelectAdapter(List<String> list,Map<Integer,Boolean> isCheck, Context context) { this.list = list; this.context = context; this.isCheck = isCheck;}
设置条目checkBox 的点击事件
viewHolder.mCheckBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (isCheck.get(position)) { //如果取消,则设置map集合中为false viewHolder.mCheckBox.setChecked(false); isCheck.put(position,false); } else { //如果选中,则设置map集合中为true viewHolder.mCheckBox.setChecked(true); isCheck.put(position,true); } } });
注意!!!
注意!!!
注意!!!
在getView 方法返回view之前一定要给CheckBox设置中状态,否则在复用的时候会出现状态错乱
//给CheckBox设置状态viewHolder.mCheckBox.setChecked(isCheck.get(position));return convertView;
接下来看一下全选及反选功能的实现 MultiSelectActivity
全选功能实现
//全选selectAll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { for (int i = 0; i < list.size(); i++) { //把集合中所有的选项设置为true,刷新布局 isCheck.put(i, true); } //刷新布局 initData(); }});
反选功能实现
//反选selectOpposite.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //遍历map集合,设置反选 for (int key : isCheck.keySet()) { if(isCheck.get(key)){ isCheck.put(key,false); }else{ isCheck.put(key,true); } } //刷新布局 initData(); }});
最后提交
//提交submit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //清除之前选择的数据 selectList.clear(); //遍历map集合 for (int key : isCheck.keySet()) { //判断是否已选择,如果已选择,则添加进selectList if(isCheck.get(key)){ selectList.add(key); } } Toast.makeText(MultiSelectActivity.this,selectList.toString(),Toast.LENGTH_SHORT).show(); }});
以上就是简单实现多选列表,全选、反选功能的过程,仅供参考,如有错误之处,还请指正!
代码点这里
0 0
- Android CheckBox实现多选、全选、反选功能
- checkbox全选、反选功能
- Js 实现一组checkBox全选、不选、反选功能
- Jquery实现checkbox的全选、反选功能代码
- jQuery(5)--实现checkbox的全选,反选,全不选功能
- 使用js实现checkbox的全选与反选功能
- JQuery 控制 checkbox 实现全选/反选功能
- javascript之checkbox全选反选功能实现
- Android ListView长按弹出CheckBox,实现全选,反选,批量删除功能
- checkbox全选和反选功能
- checkbox全选和反选功能
- checkbox全选反选
- checkbox 全选 反选
- checkbox全选反选
- checkbox,全选,反选
- checkbox全选反选
- jQuery实现checkbox全选和反选
- JQuery 实现checkbox全选、反选、取消
- 正则匹配问题
- 数据结构:JAVA
- 学习笔记1--Android应用&Android studio项目结构
- spring中的传播性
- 解决VMware虚拟机CentOS linux联网问题
- Android CheckBox实现多选、全选、反选功能
- redis主从复制,读写分离以及哨兵的配置
- Weblogic启动web应用报内存溢出错误
- Frog Jump
- 字符串反转
- ROS导航功能包集中的修复机制
- SAP HANA查找字符串位置
- vs2013+ 编译 opencv3.x 的拓展包
- 随机输出带权重数组中的值(百度二面算法题目)