Android开发CheckBox控件,全选,反选,取消全选

在Android开发中我们经常会使用CheckBox控件,那么怎么实现CheckBox控件的全选,反选呢

首先布局我们的界面:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <TextView
        android:id="@+id/textviewtitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:text="平时喜欢做什么事情?" />

    <CheckBox
        android:id="@+id/checkboxall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/textviewtitle"
        android:layout_alignTop="@id/textviewtitle"
        android:layout_toRightOf="@id/textviewtitle"
        android:text="全选" />
    <!--内容的CheckBox-->
    <CheckBox
        android:id="@+id/checkbox1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textviewtitle"
        android:layout_marginRight="80dp"
        android:text="玩游戏" />

    <CheckBox
        android:id="@+id/checkbox2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textviewtitle"
        android:layout_toRightOf="@+id/checkbox1"
        android:text="学习" />

    <CheckBox
        android:id="@+id/checkbox3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/checkbox1"
        android:text="敲代码" />

    <CheckBox
        android:id="@+id/checkbox4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/checkbox2"
        android:layout_toRightOf="@+id/checkbox1"
        android:text="跑步" />

    <CheckBox
        android:id="@+id/checkbox5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/checkbox3"
        android:text="游泳" />

    <CheckBox
        android:id="@+id/checkbox6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/checkbox4"
        android:layout_toRightOf="@+id/checkbox1"
        android:text="睡觉" />

    <TextView
        android:id="@+id/textviewinfo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/checkbox5"
        android:layout_marginTop="20dp"
        android:text="已选择:"/>
</RelativeLayout>

注意要给对应的CheckBox编写Id,

接下来就是java代码了:代码主要实现的功能,点击全选按钮时,我会

把所有的选项选中,在全选的情况下,我取消任意一个复选框,那么全选按钮也会取消选中,同理,我选中了所有的复选框后,其全选按钮也会选中。

代码如下:

package com.dc.work3;

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.TextView;
import android.widget.Toast;

import java.util.LinkedList;
import java.util.List;

/**
 * Created by 丁先森
 */

public class MainActivity2s extends AppCompatActivity {
    private CheckBox checkboxall;
    private CheckBox checkBox1;
    private CheckBox checkBox2;
    private CheckBox checkBox3;
    private CheckBox checkBox4;
    private CheckBox checkBox5;
    private CheckBox checkBox6;

    private TextView textviewinfo;
    private List<String> checkedStr;

    //操作取消一个时,全选取消,这个变量是是否是用户点击
    private boolean checkFoUser=true;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_2);

        checkboxall = (CheckBox) findViewById(R.id.checkboxall);
        checkBox1 = (CheckBox) findViewById(R.id.checkbox1);
        checkBox2 = (CheckBox) findViewById(R.id.checkbox2);
        checkBox3 = (CheckBox) findViewById(R.id.checkbox3);
        checkBox4 = (CheckBox) findViewById(R.id.checkbox4);
        checkBox5 = (CheckBox) findViewById(R.id.checkbox5);
        checkBox6 = (CheckBox) findViewById(R.id.checkbox6);
        textviewinfo = (TextView) findViewById(R.id.textviewinfo);

        checkBox1.setOnCheckedChangeListener(changeListener);
        checkBox2.setOnCheckedChangeListener(changeListener);
        checkBox3.setOnCheckedChangeListener(changeListener);
        checkBox4.setOnCheckedChangeListener(changeListener);
        checkBox5.setOnCheckedChangeListener(changeListener);
        checkBox6.setOnCheckedChangeListener(changeListener);
        checkboxall.setOnCheckedChangeListener(changeListener);

        checkedStr=new LinkedList<>();

    }
    public CompoundButton.OnCheckedChangeListener changeListener = new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            switch (buttonView.getId()){
                case R.id.checkbox1:
                case R.id.checkbox2:
                case R.id.checkbox3:
                case R.id.checkbox4:
                case R.id.checkbox5:
                case R.id.checkbox6:
                    String str=buttonView.getText().toString();
                    if(isChecked){
                        checkedStr.add(str);
                    }else {
                        checkedStr.remove(str);
                    }
//                    checkFoUser=false;
                    checkboxall.setOnCheckedChangeListener(null);
                    if(checkBox1.isChecked()&&checkBox2.isChecked()&&checkBox3.isChecked()&&checkBox4.isChecked()&&checkBox5.isChecked()&&checkBox6.isChecked()){
                        //表示如果都选中时,把全选按钮也选中
                        checkboxall.setChecked(true);
                    }else {
                        //否则就全选按钮去不选中,但是这样会触发checkboxall的监听,会把所有的都取消掉
                        checkboxall.setChecked(false);
                    }
//                    checkFoUser=true;
                    /*第二种方法*/
                    checkboxall.setOnCheckedChangeListener(changeListener);
                    break;
                case R.id.checkboxall:
                    if(checkFoUser) {
                        checkBox1.setChecked(isChecked);
                        checkBox2.setChecked(isChecked);
                        checkBox3.setChecked(isChecked);
                        checkBox4.setChecked(isChecked);
                        checkBox5.setChecked(isChecked);
                        checkBox6.setChecked(isChecked);
                        break;
                    }
            }
            StringBuffer sb=new StringBuffer();
            for(String str:checkedStr){
                sb.append(str+",");
            }
            if(sb.length()>0){
                //设置长度为长度-1,去除最后的“,”
                sb.setLength(sb.length()-1);
            }
            textviewinfo.setText("已选择:"+sb.toString());
        }
    };

}

写的不是很好,但是可以简单的解决问题,欢迎大家积极交流,留下宝贵的建议,共同学习!
时间: 2024-10-29 20:09:42

Android开发CheckBox控件,全选,反选,取消全选的相关文章

CAD控件,CAD插件使用教程:Android开发使用控件--开发环境的搭建

Android开发使用控件入门--环境搭建 2014-12-24 09:57     14人阅读     评论(0)     收藏         编辑     删除 CAD控件.CAD三维控件,手机控件 Android开发控件 软件名称(,梦,,想.CAD  ,控件) 1. 环境搭建: 3 1.1. 安装Eclipse 3 1.2. 下载JDK 3 1.3. 下载Android SDK 5 1.4. 给Eclipse 安装ADT插件  8 1.5. 运行Eclipse设置Android ADT

Android开发_ImageButton控件

Android中的控件中的ImageButton有着一般Button控件所具有的一般特征,但有一个Image的脸 因此可以使用 setImageResource(resId); 来设定其图片资源. 经过测定,Button类组件的获取焦点,即setFocusChange()方法基本没有用,因为一般的Button都会响应点击时间,点击事件会覆盖掉获取焦点事件.

Android开发ImageView控件缩放图片

首先还是最基础的ImageView控件如何显示图片: <ImageView                Android:id="@+id/imgView"                android:layout_width="fill_parent"                android:layout_height="fill_parent"                android:src="@drawable

Android开发 设置控件边角半圆

1 <?xml version="1.0" encoding="utf-8"?> 2 <shape xmlns:android="http://schemas.android.com/apk/res/android" > 3 <corners android:radius="30dip" /> 4 <solid android:color="#ff3290f0" /

android 开发-设置控件/view的水平方向翻转

设置控件沿着水平方向翻转(即Y轴180°) 看效果: 代码: <pl.droidsonroids.gif.GifImageView android:id="@+id/gv_image1" android:layout_width="0dp" android:layout_weight="1" android:layout_height="150dp" android:scaleType="fitXY"

Android开发之控件-Android-PullToRefresh

下拉刷新,使用的是Android-PullToRefresh,Github--https://github.com/chrisbanes/Android-PullToRefresh PullToRefresh的简单使用办法 1.通过GitHub把相关的lib下载下来,导入到ADT 下载下来是这些文件 然后导入到ADT,导入以后是4个工程 LauncherActivityPullToRefreshListFragmentPullToRefreshViewPagerlibrary 假如导入以后,工程

【Android开发】控件外边框自定义

1.在drawable里面新建自定义的资源文件shape <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="10dp"

从零开始学android开发-获取控件

mBtnNews = (Button)findViewById(R.id.btn_news);//获取控件

Android:CheckBox控件

1)ChexkBox继承自CompoundButton组件: 2)isChecked()--确定是否选中:setChecked(bool checked)--设置选中或取消选中: 3)监听事件:CompoundButton.OnCheckedChangeListener 使用checkbox,并实现监听测试: 1)效果: 2)源代码: res\layout\activity_main.xml <RelativeLayout xmlns:android="http://schemas.and