Android 使用 ListView 控件实现简易学生管理功能。
使用工具
- android studio (ver. 3.5.1)
- android(sdk 29)
- java(ver.1.8.0)
- gradle(ver. 5.4.1)
功能实现
1.实现多个学生信息的添加和显示
创建一个 Basic Activity 项目实现学生增加显示
2.用 EditText 实现姓名、年龄的输入,并有输入校验(空校验,数字校验)
学生实体类中定义函数实现输入合法校验。
public String mandatory(){
if (name.equals(null) || name == "" || name.length() < 2) {
return "姓名";
}
if (major.equals("请选择专业")) {
return "专业";
}
if (!isNumeric(age))
return "年龄";
int ageInt = Integer.parseInt(age);
if (ageInt < 10 || ageInt > 100) {
return "年龄";
}
return "null";
}
3.用 AutoCompleteTextView 的实现专业的输入,并有提示功能。
autoCompleteTextViewAddMajor = findViewById(R.id.add_major);
String[] major_array = {"物联网工程",
"计算机科学与技术",
"材料科学与工程",
"环境科学与工程",
"化学化工与生物工程"};
ArrayAdapter adapter = new ArrayAdapter(
this,
android.R.layout.simple_dropdown_item_1line,
major_array);
//初始化autoCompleteTextView
autoCompleteTextViewAddMajor.setAdapter(adapter);
//设置输入多少字符后提示,默认值为2,在此设为1
autoCompleteTextViewAddMajor.setThreshold(1);
4.通过 CheckBox 实现多门课程选择
private LinearLayout checkbox;
private List getCheckBoxInfo(LinearLayout checkbox) {
List courses = new ArrayList<>();
int num = checkbox.getChildCount();
for (int i = 0; i < num; i++) {
CheckBox cb = (CheckBox) checkbox.getChildAt(i);
if (cb.isChecked())
courses.add(cb.getText().toString());
}
return courses;
}
5.通过 Radio 实现性别
设置 RadioGroup 的监听。
radioGroupSex.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup rg, int checkedId) {
if (checkedId == radioButtonMan.getId()) {
sex = "男";
} else if (checkedId == radioButtonWoman.getId()) {
sex = "女";
} else {
sex = "男";
}
}
});
6.用下拉框选择学院
Layout 中 Spinner 引用 res/values 中的 college_array.xml 的中值。
android:entries="@array/college"
7.用日期控件实现入学时间的输入
private Calendar calendar; // 通过Calendar获取系统时间
点击"日期"按钮布局 设置日期。
editTextAddAdmissionDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new DatePickerDialog(AddActivity.this,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int month, int day) {
mYear = year;
mMonth = month;
mDay = day;
// 更新EditText控件日期 小于10加0
editTextAddAdmissionDate.setText(new StringBuilder()
.append(mYear)
.append("-")
.append((mMonth + 1) < 10 ? "0"
+ (mMonth + 1) : (mMonth + 1))
.append("-")
.append((mDay < 10) ? "0" + mDay : mDay));
}
}, calendar.get(Calendar.YEAR), calendar
.get(Calendar.MONTH), calendar
.get(Calendar.DAY_OF_MONTH)).show();
}
});
8.实现列表中学生信息的编辑和删除。
在学生 Adapater 中重写方法。
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
//创建一个 view 对象(item),对象的样式采用自定义的 layout 样式
View stuView = View.inflate(stuContext, R.layout.list_view, null);
///获得 item 的每个子元素
TextView tv_name = stuView.findViewById(R.id.name);
TextView tv_major = stuView.findViewById(R.id.major);
ImageView iv_edit = stuView.findViewById(R.id.edit);
ImageView iv_delete = stuView.findViewById(R.id.delete);
//将数据源的一项数据和 item 的子元素绑定
Student student = (Student) stuDates.get(i);
tv_name.setText(student.getName());
tv_major.setText(student.getMajor());
iv_edit.setImageResource(R.drawable.edit);
iv_delete.setImageResource(R.drawable.delete);
//给 iv_edit 增加一个监听
iv_delete.setOnClickListener(this);
iv_edit.setOnClickListener(this);
//给删除和编辑的 imageView 设置一个标志,用 item 的位置 i 来定位,类似一个 id
iv_delete.setTag(i);
iv_edit.setTag(i);
return stuView;
}
演示
代码下载地址
ListViewApp