• 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());
            }
        };
    
    }

    写的不是很好,但是可以简单的解决问题,欢迎大家积极交流,留下宝贵的建议,共同学习!
  • 相关阅读:
    论文尾注后无法插入分节符
    实现java对象排序的三种方式
    java数组的定义方式
    Canvas
    正则xss
    mongoDB学习记录
    查找,学习,记录
    地址
    node实战学习纪录
    nodejs学习记录
  • 原文地址:https://www.cnblogs.com/dingxiansen/p/6036833.html
Copyright © 2020-2023  润新知