转载请注明出处:http://blog.csdn.net/android_koukou/article/details/54290010

Android 中ListView带复选框多选、全选、不选处理
工作快一年了,最近用到ListView带复选框功能,虽然已经做过多次了,但对一些初学者还是有一定的困难,在这里顺便总结一下,供大家参考!!!同时希望大家提出意见!!!!

废话不多说,先看效果

效果一:点击全选,所有复选框选中; 或每个item分别点击选中会触发全选框选中;

效果二:效果一的状态下,随意取消一个item选中状态,此时全选框改变为不选中

效果三:点击全选框为不选中状态,此时所有item为不选中状态

下面是代码部分:

一、首先是activity_main.xml

 version="1.0" encoding="utf-8"?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical"  tools:context="csttech.com.checkdemo.MainActivity">  <CheckBox  android:id="@+id/ckb_main"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:background="#666666"  android:padding="10dp"  android:text="全选"/>  <ListView  android:id="@+id/list_main"  android:layout_width="match_parent"  android:layout_height="match_parent">  </ListView>
</LinearLayout>  

二、item.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"android:gravity="center_vertical"android:orientation="horizontal"android:padding="10dp"><TextView
            android:id="@+id/text_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="1"/><CheckBox
            android:id="@+id/ckb"android:focusable="false"android:focusableInTouchMode="false"android:clickable="false"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>
</LinearLayout>

三、MainActivity.class

package csttech.com.checkdemo;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ListView;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private ListView mListView;private List<Model> models;private CheckBox mMainCkb;private MyAdapter mMyAdapter;//监听来源public boolean mIsFromItem = false;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initData();initViewOper();}/*** view初始化*/private void initView() {mListView = (ListView) findViewById(R.id.list_main);mMainCkb = (CheckBox) findViewById(R.id.ckb_main);}/*** 数据加载*/private void initData() {//模拟数据models = new ArrayList<>();Model model;for (int i = 0; i < 15; i++) {model = new Model();model.setSt(i + "******");model.setIscheck(false);models.add(model);}}/*** 数据绑定*/private void initViewOper() {mMyAdapter = new MyAdapter(models, this, new AllCheckListener() {@Overridepublic void onCheckedChanged(boolean b) {//根据不同的情况对maincheckbox做处理if (!b && !mMainCkb.isChecked()) {return;} else if (!b && mMainCkb.isChecked()) {mIsFromItem = true;mMainCkb.setChecked(false);} else if (b) {mIsFromItem = true;mMainCkb.setChecked(true);}}});mListView.setAdapter(mMyAdapter);//全选的点击监听mMainCkb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton compoundButton, boolean b) {//当监听来源为点击item改变maincbk状态时不在监听改变,防止死循环if (mIsFromItem) {mIsFromItem = false;Log.e("mainCheckBox", "此时我不可以触发");return;}//改变数据for (Model model : models) {model.setIscheck(b);}//刷新listviewmMyAdapter.notifyDataSetChanged();}});}//对item导致maincheckbox改变做监听interface AllCheckListener {void onCheckedChanged(boolean b);}
}

四、MyAdapter.class

package csttech.com.checkdemo;import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.TextView;import java.util.List;/*** Created by zhaiydong on 2017/1/9.*/
public class MyAdapter extends BaseAdapter {private List<Model> data;private Context context;private MainActivity.AllCheckListener allCheckListener;public MyAdapter(List<Model> data, Context context, MainActivity.AllCheckListener allCheckListener) {this.data = data;this.context = context;this.allCheckListener = allCheckListener;}@Overridepublic int getCount() {return data.size();}@Overridepublic Object getItem(int i) {return data.get(i);}@Overridepublic long getItemId(int i) {return i;}@Overridepublic View getView(final int i, View view, ViewGroup viewGroup) {ViewHoder hd;if (view == null) {hd = new ViewHoder();LayoutInflater layoutInflater = LayoutInflater.from(context);view = layoutInflater.inflate(R.layout.item_list, null);hd.textView = (TextView) view.findViewById(R.id.text_title);hd.checkBox = (CheckBox) view.findViewById(R.id.ckb);view.setTag(hd);}Model mModel = data.get(i);hd = (ViewHoder) view.getTag();hd.textView.setText(mModel.getSt());Log.e("myadapter", mModel.getSt() + "------" + mModel.ischeck());final ViewHoder hdFinal = hd;hd.checkBox.setChecked(mModel.ischeck());view.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {CheckBox checkBox = hdFinal.checkBox;if (checkBox.isChecked()) {checkBox.setChecked(false);data.get(i).setIscheck(false);} else {checkBox.setChecked(true);data.get(i).setIscheck(true);}//监听每个item,若所有checkbox都为选中状态则更改main的全选checkbox状态for (Model model : data) {if (!model.ischeck()) {allCheckListener.onCheckedChanged(false);return;}}allCheckListener.onCheckedChanged(true);}});return view;}class ViewHoder {TextView textView;CheckBox checkBox;}}

五、Model

package csttech.com.checkdemo;/*** Created by zhaiydong on 2017/1/9.*/
public class Model {private boolean ischeck;private String st;public boolean ischeck() {return ischeck;}public void setIscheck(boolean ischeck) {this.ischeck = ischeck;}public String getSt() {return st;}public void setSt(String st) {this.st = st;}
}

demo下载地址:http://download.csdn.net/detail/android_koukou/9733420

Android 中ListView带复选框多选、全选、不选处理相关推荐

  1. Android中自带的list布局

    Android中自带的list布局方式: simple_list_item_1. simple_list_item_2. simple_list_item_checked 下面介绍:[数据适配器选用S ...

  2. vue复选框选中一个全选中了

    vue复选框选中一个全选中了 在业务开发中,使用了checkbox-group组件,发现点击其中的一个选项后,所有数据都被选中了,取消也是全部取消了. 原因:绑定数据的时候,定义的是字符串,修改为数组 ...

  3. JQuery实现复选框CheckBox的全选、反选、提交操作

    对复选框最基本的应用,就是对复选框进行全选.反选和提交等操作.复杂的操作需要与选项挂钩,来达到各种级联反应效果. [示例]使用Jquery实现复选框CheckBox的全选.反选.提交操作. (1)创建 ...

  4. android筛选功能代码,Android中 TeaScreenPopupWindow多类型筛选弹框功能的实例代码

    Github地址 YangsBryant/TeaScreenPopupWindow (Github排版比较好,建议进入这里查看详情,如果觉得好,点个star吧!) 引入module allprojec ...

  5. Android中导航栏之搜索框SearchView

    Toolbar系列文章导航 Android中导航栏之Toolbar的使用 Android中导航栏之溢出菜单OverflowMenu Android中导航栏之搜索框SearchView Android中 ...

  6. android中ListView控件onItemClick事件中获取listView传递的数据

    http://blog.csdn.net/aben_2005/article/details/6592205 本文转载自:android中ListView控件&&onItemClick ...

  7. android listview 数据同步,android中ListView数据刷新时的同步方法

    本文实例讲述了android中ListView数据刷新时的同步方法.分享给大家供大家参考.具体实现方法如下: public class Main extends BaseActivity { priv ...

  8. Android中ListView选中事件setOnItemSelectedListener无反应不生效问题

    Android中ListView选中事件setOnItemSelectedListener无反应不生效问题 在学习Android中ListView组件时,android模拟器运行app时,发现点击有反 ...

  9. android listview 分析,Android中ListView用法实例分析

    本文实例分析了Android中ListView用法.分享给大家供大家参考,具体如下: 通过在Layout中添加ListView Widget可以达到在页面布局具有列表效果的交互页面.在这里通过举例来说 ...

  10. android listview高级,Android中Listview点赞功能的实现

    最近这段时间一直在看Android,利用Listview去实现点赞功能,下面给大家介绍下基本思路. 基本思路: 进入界面–>获取数据–> 在Listview中显示–> 通过map集合 ...

最新文章

  1. 拜托别在问我 MySQL 性能优化了!
  2. hive 临时表 with_Kettle(PDI)转换中输入表输入详解
  3. 使用U盘安装Windows Server2008
  4. 解读阿里巴巴集团的“大中台、小前台”组织战略
  5. django 与 vue 的完美结合
  6. c语言 若未给全局变量赋初值,自我测试练习参考-答案.doc
  7. Oracle存储过程及调用
  8. Luogu4725 【模板】多项式对数函数(NTT+多项式求逆)
  9. Welcome To SWPUNC-ACM
  10. laravel 核心类Kernel
  11. java 网络编程 总结篇
  12. 新年新气象 新年新打算
  13. 【开发日常】什么是标准?什么是协议?标准和协议之间是什么关系?
  14. SUCTF_2019部分题解复现
  15. R语言ARIMA-GARCH波动率模型预测股票市场苹果公司日收益率时间序列
  16. 地形建模(二)--TIN拉伸成模型并贴纹理
  17. ros2上怎样才能玩rmf?
  18. 程序员过完年第一天上班被公司劝退!得知原因后,网友:被安排了
  19. 《CCNP安全Secure 642-637认证考试指南》——2.3节入侵者动机
  20. Asp.net Core 6.0 使用EF DB First 连接mysql

热门文章

  1. 斯坦福大学Andrew Ng教授主讲的《机器学习》公开课观后感
  2. Android中类似Linux下ldd分析可执行文件和动态库对库的依赖
  3. Deadline调度器之(二):细节和使用方法
  4. H.264 sequence parameter sets成员值含义学习笔记
  5. 内核初始化-从start_kernel到init
  6. 面向对象8:继承性、Object类的理解、写项目经验、debug经验
  7. 深度学习优化算法大全系列1:概览
  8. 机器学习:激活函数的作用和原理
  9. C语言编写程序11到20的和,C语言编程 菜鸟练习100题(11-20)
  10. oracle的db的容量计算公式,Oracle如何精确计算row的大小