复选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();//显示内容
}
});
}
}
运行结果: