复选checkBox用onCheckedChangeListener,泛型、 final 、匿名内部类的使用

复选checkBox用onCheckedChangeListener

1.匿名内部类:

  • A:匿名内部类
    就是内部类的简化写法。
  • B:前提:存在一个类或者接口
    这里的类可以是具体类也可以是抽象类。
  • C:格式:
 new 类名或者接口名(){
        重写方法;
    }
  • D:本质是什么呢?
    • 是一个继承了该类或者实现了该接口的子类匿名对象。
  • E:案例演示
    • 按照要求来一个匿名内部类

二、final:

  • A:final概述
    final是最终的
  • B:final修饰特点
    • 修饰类,类不能被继承
    • 修饰变量,变量就变成了常量,只能被赋值一次
    • 修饰方法,方法不能被重写,匿名内部类里面不能使用变量所以需要将变量定义成final类。

三、for循环遍历的简单写法

for(循环变量类型 循环变量名称:要被遍历的对象){
    循环体;
}

四、泛型

  • 泛型基础

      1、泛型只作用于编译器,编译器是一行一行的检查的
    
      2、ArrayList<E>中的E称为**类型变量或类型参数**
    
      3、整个ArrayList<Integer>称为**参数化类型**
    
      4、ArrayList<Integer>中Integer称为**类型参数的实例或实际类型参数**
    
      5、ArrayList<Integer>中的<>念typeof.
    
      6、ArrayList称为**原始类型**
    
      7、参数化类型可以**引用一个原始类型的对象,编译器警告**
    
      8、原始类型可以**引用一个参数化类型的对象,编译器警告**
    
      9、参数化类型不考虑类型参数的继承关系。
    
    10、在创建数组实例时,数组的元素不能使用能够参数化的类型。
    
    11、通配符?,通配符可以引用其他各种类型化的类型,?定义的变量主要用作引用那个,可以调用与参数无关的方法,不能调用与参数化有关的方法。
    
     12、通配符的上边界ArrayList<? extends Number>
    
     13、通配符的下边界ArrayList<? super Integer>
    
  • 泛型的应用
    在决定使用 List 还是使用 ArrayList 类(两者具有类似的功能)时,
    记住 List 类在大多数情况下执行得更好并且是类型安全的。
    如果对 List 类的类型 T 使用引用类型,则两个类的行为是完全相同的。
    但是,如果对类型 T 使用值类型,则需要考虑实现和装箱问题

    如果对类型 T 使用值类型,则编译器将特别针对该值类型生成 List 类的实现。这意味着不必对 List 对象的列表元素进行装箱就可以使用该元素,并且在创建大约 500 个列表元素之后,不对列表元素装箱所节省的内存将大于生成该类实现所使用的内存。
    泛型案例:

import java.util.ArrayList;
import java.util.List;
//声明一个泛型类  

public classTestGennericList {

    public static void main(String[] args) {

        // 声明一个List对象,只加入string参数

        List<String>names = newArrayList<String>();

        names.add("1");

        names.add("2");

        names.add("3");

        // 遍历List

        for (String name : names) {

            System.out.println(name);

        }

        System.out.println("-----");

        // 向List中插入元素

        names.add(1, "1");

        // 移除指定元素

        names.remove("1");

        for (String name : names) {

            System.out.println(name);

        }

    }

}

思想:
(1)布局文件xml
(2)定义字符串变量check用来存放选择的结果
(3)设置泛型ArrayList<>用来存放选择的结果
(4)找到每一个checkBox对应的id用findViewById
(5)对每一个多选按钮设置监听事件onCheckedChangeListener()
(6)if…else语句,如果被点击isChecked()需要调用add方法将s添加进去,否则没有被点击那么就要移除s,s要提前定义在if之前并调用getText().toString()方法转化成字符串。
(7)对按钮Button设置监听事件,设置 AlertDialog.Builder,以对话框的形式显示

java文件:

package com.example.acer.danxuanqm;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    String checked = "";    //定义一个字符串变量

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = findViewById(R.id.btn);

        final List<String> check = new ArrayList<>();   //List<String> list = new ArrayList<String>();设置泛型  其中<String>表示此列表是字符串型
        CheckBox checkBox1 = findViewById(R.id.cb1);
        CheckBox checkBox2 = findViewById(R.id.cb2);
        CheckBox checkBox3 = findViewById(R.id.cb3);

        checkBox1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { //匿名内部类
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                String s = buttonView.getText().toString();
                if (isChecked) {
                    check.add(s);
                }else {
                    check.remove(s);    //回收输入的内容,不然重新选择开始的选择就会也出现
                }
            }
        });
        checkBox2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                String s = buttonView.getText().toString();
                if (isChecked) {
                    check.add(s);
                }else{
                    {
                  check.remove(s);  //回收输入的内容
                }
                }
            }
        });
        checkBox3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                String s = buttonView.getText().toString();
                if (isChecked) {
                    check.add(s);
                }
                else {
                    check.remove(s);    //内容要回收
                }
            }
        });


        button.setOnClickListener(new View.OnClickListener() {  //对按钮设置监听事件
            @Override
            public void onClick(View v) {
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);   //设置对话框
                builder.setTitle("业余爱好");   //设置标题

                String result = "";

                for (String s : check) {	//对s进行遍历
                    result += s;
                }

                builder.setMessage("你的业余爱好为:" + result);	//设置显示内容
                builder.show();//显示内容
            }
        });
    }
}

运行结果:
在这里插入图片描述

发布了55 篇原创文章 · 获赞 5 · 访问量 4137

猜你喜欢

转载自blog.csdn.net/qq_43654669/article/details/103914787
今日推荐