欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > Android Studio 大作业--学生信息管理系统

Android Studio 大作业--学生信息管理系统

2024/10/24 6:33:24 来源:https://blog.csdn.net/m0_64069699/article/details/135324803  浏览:    关键词:Android Studio 大作业--学生信息管理系统

 欢迎光临:

古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。——苏轼
---------------🍎------------🍉--------------
🐼学编程的bird的博客,邀您一起学习🦌
----------------🥕------------🥭-------------

😊很高兴你打开了这篇博客。
★如有疑问不解或者说有想问的地方,都可以在下方评论留言,博主看到会尽快回复的。
★当然,期待你的点赞+关注哦!

★本人微信:wxid_v28nw5cckzz622,若需要帮助,请备注来源+意图
————————————————
版权声明:本文为CSDN博主「学编程的bird」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:Android Studio 大作业--学生信息管理系统-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_64069699/article/details/135324803


内容大概:

简易学生信息管理系统项目需求,大致需要以下Java文件和XML布局文件:Java文件:Student 类(实体类):用于存储学生信息。
StudentDBHelper 类(数据库操作类):继承自SQLiteOpenHelper,负责创建表、插入、删除、更新和查询学生数据。
StudentListAdapter 类(RecyclerView Adapter):适配器类,用于在“学生列表”模块展示学生数据。
StudentListFragment 类(Fragment):实现学生列表界面功能,包含RecyclerView及其Adapter的初始化等。
AddStudentFragment 类(Fragment):实现添加学生界面功能,包含EditText输入框、Button提交按钮、ImageView头像选择等。
SearchStudentFragment 类(Fragment):实现查询学生界面功能,包含EditText输入框、CheckBox或RadioButton查询条件选择、查询结果展示列表的初始化等。
SearchStudentListAdapter 类(RecyclerView Adapter):适配器类,用于在“搜索”模块展示学生数据。
MainActivity:用于初始化底部导航栏与ViewPager2,并管理各个Fragment。XML布局文件:activity_main.xml:主Activity布局文件,包含ViewPager2和TabLayout等控件。
fragment_student_list.xml:学生列表Fragment的布局文件,包含RecyclerView等控件。
fragment_add_student.xml:添加学生Fragment的布局文件,包含姓名、学号、专业等EditText输入框以及上传或选择图片的ImageView和提交按钮等控件。
item_student1.xml:RecyclerView中单个学生项的布局文件,包含显示学生信息的各种TextView、ImageView等控件。
fragment_search_student.xml:查询学生Fragment的布局文件,包含查询输入框、查询条件选择控件以及查询结果展示的ListView或RecyclerView控件。
item_student2.xml:RecyclerView中单个学生项的布局文件,包含显示学生信息的各种TextView、ImageView等控件。
dialog_delete_confirm.xml:删除确认AlertDialog或PopupWindow的布局文件,包含提示文字和确认/取消按钮。
bottom_navigation_menu.xml:底部导航栏。

 使用的控件:

此APP中包含以下控件:Button、TextView、EditText、ImageView、Toast、Activity 跳转和传值、ViewPager2+Fragment 底部导航PopupWindow & AlertDialog、数据库RadioButton、CheckBox、返回值、RecyclerView

整体架构:


 示例展示:

学生列表

 添加

 搜索


源代码: 

JAVA代码

MainActivity

package com.example.myfinalwork;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.widget.ViewPager2;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.appcompat.widget.Toolbar;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.Menu;
import android.widget.Toast;import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.example.myfinalwork.StudentListRefreshListener;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity implements StudentListRefreshListener {private ViewPager2 viewPager;private BottomNavigationView bottomNavigationView;private List<Fragment> fragmentsList;private MenuItem lastSelectedMenuItem;private StudentListFragment studentListFragment; // 新增变量@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化ViewPager2和BottomNavigationViewviewPager = findViewById(R.id.view_pager);setupViewPager();// 在这里找到并保存StudentListFragment的引用for (Fragment fragment : fragmentsList) {if (fragment instanceof StudentListFragment) {studentListFragment = (StudentListFragment) fragment;break;}}bottomNavigationView = findViewById(R.id.bottom_navigation_view);bottomNavigationView.setOnNavigationItemSelectedListener(navigationItemSelectedListener());bottomNavigationView.setSelectedItemId(R.id.action_student_list);}@Overridepublic void onStudentListRefresh() {if (studentListFragment != null) {studentListFragment.refreshStudentList();}}private BottomNavigationView.OnNavigationItemSelectedListener navigationItemSelectedListener() {return new BottomNavigationView.OnNavigationItemSelectedListener() {@Overridepublic boolean onNavigationItemSelected(@NonNull MenuItem item) {if (item.getItemId() == R.id.action_student_list) {viewPager.setCurrentItem(0);} else if (item.getItemId() == R.id.action_add_student) {viewPager.setCurrentItem(1);} else if (item.getItemId() == R.id.action_search_student) {viewPager.setCurrentItem(2);}lastSelectedMenuItem = item;return true;}};}private void setupViewPager() {fragmentsList = new ArrayList<>();studentListFragment = new StudentListFragment(); // 修改:直接使用类级别的变量AddStudentFragment addStudentFragment = new AddStudentFragment();SearchStudentFragment searchStudentFragment = new SearchStudentFragment();// 为AddStudentFragment设置一个接口回调以通知MainActivity刷新列表addStudentFragment.setStudentListRefreshListener(this);fragmentsList.add(studentListFragment);fragmentsList.add(addStudentFragment);fragmentsList.add(searchStudentFragment);viewPager.setAdapter(new FragmentStateAdapter(this) {@NonNull@Overridepublic Fragment createFragment(int position) {return fragmentsList.get(position);}@Overridepublic int getItemCount() {return fragmentsList.size();}});viewPager.setUserInputEnabled(false); // 可选:禁用手动滑动切换页面}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.bottom_navigation_menu, menu);return true;}
}

 Student类

package com.example.myfinalwork;public class Student {private String id;private String name;private String major;private boolean selected; // 添加一个布尔变量来表示学生是否被选中public Student(String id, String name, String major) {this.id = id;this.name = name;this.major = major;this.selected = false; // 初始化时默认未选中}public Student() {}// Getters and Setterspublic String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getMajor() {return major;}public void setMajor(String major) {this.major = major;}// 新增isSelected()和setSelected()方法public boolean isSelected() {return selected;}public void setSelected(boolean selected) {this.selected = selected;}@Overridepublic String toString() {return "Student{" +"id='" + id + '\'' +", name='" + name + '\'' +", major='" + major + '\'' +", selected=" + selected +'}';}
}

 StudentDBHelper类

package com.example.myfinalwork;import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;import java.util.ArrayList;
import java.util.List;public class StudentDBHelper extends SQLiteOpenHelper {// 数据库名称private static final String DATABASE_NAME = "StudentManager.db";// 数据库版本号,每次更新数据库结构时需要增加private static final int DATABASE_VERSION = 1;// 学生信息表名public static final String TABLE_NAME_STUDENTS = "students";// 表列名定义public static final String COLUMN_ID = "id";public static final String COLUMN_NAME = "name";public static final String COLUMN_MAJOR = "major";// 创建学生信息表的SQL语句private static final String CREATE_TABLE_STUDENTS = "CREATE TABLE " + TABLE_NAME_STUDENTS +"(" +COLUMN_ID + " TEXT PRIMARY KEY," +COLUMN_NAME + " TEXT NOT NULL," +COLUMN_MAJOR + " TEXT NOT NULL" +")";public StudentDBHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(CREATE_TABLE_STUDENTS);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// 在数据库版本升级时,可以在此处添加数据迁移逻辑或者删除旧表重建新表db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME_STUDENTS);onCreate(db);}/*** 一个简单的方法用于将学生信息插入数据库,具体实现由StudentDBHelper提供* @param student 要插入的学生对象*/public void insertStudent(Student student) {SQLiteDatabase db = this.getWritableDatabase();ContentValues values = new ContentValues();values.put(COLUMN_ID, student.getId());values.put(COLUMN_NAME, student.getName());values.put(COLUMN_MAJOR, student.getMajor());db.insert(TABLE_NAME_STUDENTS, null, values);db.close(); // 关闭数据库连接}/*** 根据查询条件搜索学生* @param query 搜索关键词* @param searchBy 搜索依据字段("name" 或 "id" 或 "major")* @return 匹配到的学生列表*/public List<Student> searchStudents(String query, String searchBy) {List<Student> studentList = new ArrayList<>();SQLiteDatabase db = this.getWritableDatabase();Cursor cursor;if (searchBy.equals("name")) {cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME_STUDENTS +" WHERE " + COLUMN_NAME + " LIKE ?", new String[]{"%" + query + "%"});} else if (searchBy.equals("id")) {cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME_STUDENTS +" WHERE " + COLUMN_ID + " LIKE ?", new String[]{"%" + query + "%"});} else if (searchBy.equals("major")) {cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME_STUDENTS +" WHERE " + COLUMN_MAJOR + " LIKE ?", new String[]{"%" + query + "%"});} else {throw new IllegalArgumentException("Invalid searchBy field");}if (cursor.moveToFirst()) {do {Student student = new Student();int idColumnIndex = cursor.getColumnIndex(COLUMN_ID);int nameColumnIndex = cursor.getColumnIndex(COLUMN_NAME);int majorColumnIndex = cursor.getColumnIndex(COLUMN_MAJOR);if (idColumnIndex >= 0) {student.setId(cursor.getString(idColumnIndex));}if (nameColumnIndex >= 0) {student.setName(cursor.getString(nameColumnIndex));}if (majorColumnIndex >= 0) {student.setMajor(cursor.getString(majorColumnIndex));}// 只有当所有必要的字段都获取成功时才添加到列表if (student.getId() != null && student.getName() != null && student.getMajor() != null) {studentList.add(student);}} while (cursor.moveToNext());}cursor.close();db.close();return studentList;}/*** 获取所有学生信息* @return 所有的学生列表*/@SuppressLint("Range")public List<Student> getAllStudents() {List<Student> studentList = new ArrayList<>();SQLiteDatabase db = this.getReadableDatabase();Cursor cursor = db.query(TABLE_NAME_STUDENTS, null, null, null, null, null, null);if (cursor.moveToFirst()) {do {Student student = new Student();student.setId(cursor.getString(cursor.getColumnIndex(COLUMN_ID)));student.setName(cursor.getString(cursor.getColumnIndex(COLUMN_NAME)));student.setMajor(cursor.getString(cursor.getColumnIndex(COLUMN_MAJOR)));studentList.add(student);} while (cursor.moveToNext());}cursor.close();db.close();return studentList;}/*** 根据学生ID从数据库中删除学生信息* @param studentId 要删除的学生的ID*/public void deleteStudent(String studentId) {SQLiteDatabase db = this.getWritableDatabase();db.delete(TABLE_NAME_STUDENTS, COLUMN_ID + "=?", new String[]{studentId});db.close(); // 关闭数据库连接}}

SearchStudentFragment类

package com.example.myfinalwork;import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Toast;import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import java.util.ArrayList;
import java.util.List;public class SearchStudentFragment extends Fragment {private EditText editTextSearchQuery;private RadioButton radioButtonByName, radioButtonById,radioButtonByMajor;private RecyclerView recyclerViewSearchResults;private SearchListAdapter searchResultsAdapter;private List<Student> searchedStudents;private StudentDBHelper dbHelper;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View rootView = inflater.inflate(R.layout.fragment_search_student, container, false);// 初始化控件引用editTextSearchQuery = rootView.findViewById(R.id.edit_text_search_query);radioButtonByName = rootView.findViewById(R.id.radio_button_name);radioButtonById = rootView.findViewById(R.id.radio_button_id);radioButtonByMajor = rootView.findViewById(R.id.radio_button_major);recyclerViewSearchResults = rootView.findViewById(R.id.recycler_view_search_results);recyclerViewSearchResults.setLayoutManager(new LinearLayoutManager(requireContext()));// 初始化数据库帮助类dbHelper = new StudentDBHelper(getActivity().getApplicationContext());// 初始化搜索结果列表的适配器searchedStudents = new ArrayList<>();searchResultsAdapter = new SearchListAdapter(requireContext(), searchedStudents);recyclerViewSearchResults.setAdapter(searchResultsAdapter);// 添加搜索按钮点击事件监听器Button buttonSearch = rootView.findViewById(R.id.button_search);buttonSearch.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String query = editTextSearchQuery.getText().toString().trim();String searchBy;if (radioButtonByName.isChecked()) {searchBy = "name";} else if (radioButtonById.isChecked()) {searchBy = "id";} else if (radioButtonByMajor.isChecked()) { // 新增部分searchBy = "major";} else {searchBy = "name"; // 默认值,如果都没有选中则按照姓名搜索}if (!query.isEmpty()) {searchedStudents.clear();List<Student> students = dbHelper.searchStudents(query, searchBy);searchedStudents.addAll(students);searchResultsAdapter.notifyDataSetChanged();if (searchedStudents.isEmpty()) {Toast.makeText(getContext(), "未找到匹配的学生", Toast.LENGTH_SHORT).show();}} else {Toast.makeText(getContext(), "请输入搜索关键词", Toast.LENGTH_SHORT).show();}}});return rootView;}}

 SearchListAdapter类

package com.example.myfinalwork;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.CheckBox;import android.widget.TextView;import androidx.annotation.NonNull;import androidx.recyclerview.widget.RecyclerView;import java.util.List;public class SearchListAdapter extends RecyclerView.Adapter<SearchListAdapter.StudentViewHolder> {private Context context;private List<Student> studentList;public SearchListAdapter(Context context, List<Student> studentList) {this.context = context;this.studentList = studentList;}@NonNull@Overridepublic StudentViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View itemView = LayoutInflater.from(context).inflate(R.layout.item_student2, parent, false);return new StudentViewHolder(itemView);}@Overridepublic void onBindViewHolder(@NonNull StudentViewHolder holder, int position) {final Student currentStudent = studentList.get(position);holder.studentName.setText(currentStudent.getName());holder.studentId.setText(currentStudent.getId());holder.studentMajor.setText(currentStudent.getMajor());}@Overridepublic int getItemCount() {return studentList.size();}// ViewHolder 类用于缓存视图组件public static class StudentViewHolder extends RecyclerView.ViewHolder {TextView studentName, studentId, studentMajor;CheckBox checkBoxSelect;public StudentViewHolder(@NonNull View itemView) {super(itemView);studentName = itemView.findViewById(R.id.text_view_student_name);studentId = itemView.findViewById(R.id.text_view_student_id);studentMajor = itemView.findViewById(R.id.text_view_student_major);checkBoxSelect = itemView.findViewById(R.id.check_box_select);}}
}

 StudentListFragment类

package com.example.myfinalwork;import android.app.AlertDialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import java.util.ArrayList;
import java.util.List;public class StudentListFragment extends Fragment implements StudentListAdapter.OnItemSelectedListener {private RecyclerView recyclerView;private StudentListAdapter adapter;private List<Student> studentList;private Button deleteButton;private List<Student> selectedStudents = new ArrayList<>();private StudentDBHelper dbHelper;private AlertDialog deleteConfirmationDialog;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// 加载fragment布局View rootView = inflater.inflate(R.layout.fragment_student_list, container, false);// 初始化数据库助手dbHelper = new StudentDBHelper(requireContext());// 初始化RecyclerView和AdapterrecyclerView = rootView.findViewById(R.id.recycler_view_students);recyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));// 这里可以填充或从数据库加载学生数据// 初始化数据列表studentList = new ArrayList<>();studentList = dbHelper.getAllStudents();// 创建并设置Adapteradapter = new StudentListAdapter(requireContext(), studentList);adapter.setOnItemSelectedListener(this); // 设置选择监听器recyclerView.setAdapter(adapter);// 获取并设置删除按钮点击事件deleteButton = rootView.findViewById(R.id.button_delete);deleteButton.setOnClickListener(v -> showDeleteConfirmationDialog());// 获取并设置刷新按钮点击事件Button refreshButton = rootView.findViewById(R.id.button_refresh);refreshButton.setOnClickListener(v -> {refreshStudentList();Toast.makeText(requireContext(), "学生列表已刷新", Toast.LENGTH_SHORT).show();});return rootView;}// 显示删除确认对话框private void showDeleteConfirmationDialog() {if (!selectedStudents.isEmpty()) {AlertDialog.Builder builder = new AlertDialog.Builder(requireContext());View dialogView = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_delete_confirm, null);Button btnCancel = dialogView.findViewById(R.id.button_cancel);Button btnDelete = dialogView.findViewById(R.id.button_delete);btnCancel.setOnClickListener(v -> deleteConfirmationDialog.dismiss());btnDelete.setOnClickListener(v -> {for (Student student : selectedStudents) {dbHelper.deleteStudent(student.getId()); // 从数据库中删除学生studentList.remove(student); // 从列表中移除学生}selectedStudents.clear(); // 清空已删除的学生列表adapter.notifyDataSetChanged(); // 刷新RecyclerViewdeleteConfirmationDialog.dismiss();Toast.makeText(requireContext(), "删除成功", Toast.LENGTH_SHORT).show();});deleteConfirmationDialog = builder.setView(dialogView).setTitle("删除确认").create();deleteConfirmationDialog.show();} else {Toast.makeText(requireContext(), "请先选择要删除的学生", Toast.LENGTH_SHORT).show();}}@Overridepublic void onItemSelected(Student student, boolean selected) {if (selected) {selectedStudents.add(student);} else {selectedStudents.remove(student);}}public void refreshStudentList() {// 从数据库重新获取学生数据studentList.clear(); // 清空现有数据studentList.addAll(dbHelper.getAllStudents()); // 将新数据添加到studentListadapter.notifyDataSetChanged(); // 刷新RecyclerView的数据}}

StudentListAdapter类

package com.example.myfinalwork;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;import java.util.List;public class StudentListAdapter extends RecyclerView.Adapter<StudentListAdapter.StudentViewHolder> {private Context context;private List<Student> studentList;private OnItemSelectedListener listener;public StudentListAdapter(Context context, List<Student> studentList) {this.context = context;this.studentList = studentList;}// 添加一个接口,用于监听选择事件public interface OnItemSelectedListener {void onItemSelected(Student student, boolean selected);}public void setOnItemSelectedListener(OnItemSelectedListener listener) {this.listener = listener;}@NonNull@Overridepublic StudentViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View itemView = LayoutInflater.from(context).inflate(R.layout.item_student1, parent, false);return new StudentViewHolder(itemView);}@Overridepublic void onBindViewHolder(@NonNull StudentViewHolder holder, int position) {final Student currentStudent = studentList.get(position);holder.studentName.setText(currentStudent.getName());holder.studentId.setText(currentStudent.getId());holder.studentMajor.setText(currentStudent.getMajor());holder.checkBoxSelect.setChecked(currentStudent.isSelected());holder.checkBoxSelect.setOnCheckedChangeListener((buttonView, isChecked) -> {if (listener != null) {currentStudent.setSelected(isChecked);listener.onItemSelected(currentStudent, isChecked);}});}@Overridepublic int getItemCount() {return studentList.size();}// ViewHolder 类用于缓存视图组件public static class StudentViewHolder extends RecyclerView.ViewHolder {TextView studentName, studentId, studentMajor;CheckBox checkBoxSelect;public StudentViewHolder(@NonNull View itemView) {super(itemView);studentName = itemView.findViewById(R.id.text_view_student_name);studentId = itemView.findViewById(R.id.text_view_student_id);studentMajor = itemView.findViewById(R.id.text_view_student_major);checkBoxSelect = itemView.findViewById(R.id.check_box_select);}}
}

AddStudentFragment类

package com.example.myfinalwork;import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;import java.util.List;public class AddStudentFragment extends Fragment {private EditText editTextName, editTextId, editTextMajor;private Button buttonSubmit;private StudentDBHelper dbHelper;private StudentListRefreshListener refreshListener; // 移除MainActivity前缀,因为它是一个接口引用public void setStudentListRefreshListener(StudentListRefreshListener listener) {this.refreshListener = listener;}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View rootView = inflater.inflate(R.layout.fragment_add_student, container, false);// 初始化控件引用editTextName = rootView.findViewById(R.id.edit_text_name);editTextId = rootView.findViewById(R.id.edit_text_student_id);editTextMajor = rootView.findViewById(R.id.edit_text_major);buttonSubmit = rootView.findViewById(R.id.button_submit);// 初始化数据库帮助类dbHelper = new StudentDBHelper(getActivity().getApplicationContext());// 获取宿主Activity的引用并设置监听器(已在setupViewPager()中完成)// 添加提交按钮点击事件监听器buttonSubmit.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String name = editTextName.getText().toString().trim();String id = editTextId.getText().toString().trim();String major = editTextMajor.getText().toString().trim();if (!name.isEmpty() && !id.isEmpty() && !major.isEmpty()) {Student newStudent = new Student(id, name, major);dbHelper.insertStudent(newStudent);editTextName.setText("");editTextId.setText("");editTextMajor.setText("");Toast.makeText(getContext(), "学生信息已添加", Toast.LENGTH_SHORT).show();// 添加完学生后,通知宿主Activity刷新学生列表if (refreshListener != null) {refreshListener.onStudentListRefresh();}} else {Toast.makeText(getContext(), "请确保所有字段都已填写", Toast.LENGTH_SHORT).show();}}});return rootView;}
}

 StudentListRefreshListener接口

package com.example.myfinalwork;public interface StudentListRefreshListener {void onStudentListRefresh();
}

XML布局文件 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><com.google.android.material.bottomnavigation.BottomNavigationViewandroid:id="@+id/bottom_navigation_view"android:layout_width="0dp"android:layout_height="wrap_content"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:menu="@menu/bottom_navigation_menu" /><androidx.viewpager2.widget.ViewPager2android:id="@+id/view_pager"android:layout_width="0dp"android:layout_height="0dp"app:layout_constraintBottom_toTopOf="@+id/bottom_navigation_view"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>

dialog_delete_confirm.xml 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"android:padding="24dp"android:background="@color/white"><!-- 提示信息 --><TextViewandroid:id="@+id/text_view_dialog_message"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="16sp"android:textStyle="bold"android:textColor="@color/black"android:text="确定要删除吗?" /><!-- 水平分割线 --><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:background="@color/black" /><!-- 确认和取消按钮 --><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:gravity="end"android:paddingTop="16dp"><Buttonandroid:id="@+id/button_cancel"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="取消"android:textStyle="bold"android:textColor="@color/black"android:background="?attr/selectableItemBackgroundBorderless"android:minWidth="96dp" /><Buttonandroid:id="@+id/button_delete"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="确定"android:textStyle="bold"android:textColor="@color/black"android:background="?attr/selectableItemBackgroundBorderless"android:minWidth="96dp"android:layout_marginStart="16dp" /></LinearLayout></LinearLayout>

 fragment_add_student.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"android:padding="16dp"><!-- 姓名输入框 --><ImageViewandroid:id="@+id/imageView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/th"app:layout_constraintTop_toTopOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintBottom_toTopOf="@id/edit_text_name" /><!-- 姓名输入框 --><EditTextandroid:id="@+id/edit_text_name"android:layout_width="0dp"android:layout_height="wrap_content"android:hint="姓名"android:inputType="textPersonName"app:layout_constraintTop_toBottomOf="@id/imageView"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"android:layout_marginTop="32dp" /><!-- 学号输入框 --><EditTextandroid:id="@+id/edit_text_student_id"android:layout_width="0dp"android:layout_height="wrap_content"android:hint="学号"android:inputType="number"app:layout_constraintTop_toBottomOf="@id/edit_text_name"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"android:layout_marginTop="16dp" /><!-- 专业输入框 --><EditTextandroid:id="@+id/edit_text_major"android:layout_width="0dp"android:layout_height="wrap_content"android:hint="专业"android:inputType="text"app:layout_constraintTop_toBottomOf="@id/edit_text_student_id"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"android:layout_marginTop="16dp" /><!-- 提交按钮 --><Buttonandroid:id="@+id/button_submit"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="68dp"android:text="确定"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.498"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/edit_text_major" /></androidx.constraintlayout.widget.ConstraintLayout>

 fragment_search_student.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"android:padding="16dp"><!-- 搜索栏 --><com.google.android.material.textfield.TextInputLayoutandroid:id="@+id/text_input_layout_search"style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"android:layout_width="0dp"android:layout_height="wrap_content"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"><com.google.android.material.textfield.TextInputEditTextandroid:id="@+id/edit_text_search_query"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="搜索姓名或学号"android:inputType="text|textCapWords|textMultiLine|textAutoComplete|textAutoCorrect"/></com.google.android.material.textfield.TextInputLayout><!-- 查询条件选择 --><RadioGroupandroid:id="@+id/radio_group_search_by"android:layout_width="0dp"android:layout_height="wrap_content"android:checkedButton="@+id/radio_button_name"android:orientation="horizontal"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/text_input_layout_search"><RadioButtonandroid:id="@+id/radio_button_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按姓名搜索" /><RadioButtonandroid:id="@+id/radio_button_id"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按学号搜索" /><RadioButtonandroid:id="@+id/radio_button_major"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按专业搜索" /></RadioGroup><!-- 搜索结果列表 --><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recycler_view_search_results"android:layout_width="0dp"android:layout_height="0dp"android:scrollbars="vertical"app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"app:layout_constraintBottom_toTopOf="@+id/button_search_container"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/radio_group_search_by" /><!-- 搜索按钮容器,用于将两个按钮保持在同一行且居中 --><LinearLayoutandroid:id="@+id/button_search_container"android:layout_width="0dp"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"><!-- 搜索按钮 --><Buttonandroid:id="@+id/button_search"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="搜索"android:layout_marginEnd="8dp" /></LinearLayout></androidx.constraintlayout.widget.ConstraintLayout>

 fragment_student_list.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><com.google.android.material.appbar.MaterialToolbarandroid:id="@+id/toolbar"android:layout_width="0dp"android:layout_height="?attr/actionBarSize"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:title="学生信息管理"app:titleCentered="true"/><!-- 分割线 --><Viewandroid:id="@+id/view_separator"android:layout_width="match_parent"android:layout_height="1dp"android:background="@android:color/black"app:layout_constraintBottom_toTopOf="@+id/recycler_view_students"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/toolbar" /><!-- RecyclerView --><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recycler_view_students"android:layout_width="0dp"android:layout_height="0dp"app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"app:layout_constraintBottom_toTopOf="@+id/button_container"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/view_separator" /><!-- 按钮容器,用于包含“删除”和“刷新”按钮 --><LinearLayoutandroid:id="@+id/button_container"android:layout_width="0dp"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"><!-- 删除按钮 --><Buttonandroid:id="@+id/button_delete"android:layout_width="0dp"android:layout_height="46dp"android:layout_weight="1"android:text="删除"android:textAllCaps="false"android:textColor="@android:color/white"android:layout_marginEnd="8dp" /><!-- 刷新按钮 --><Buttonandroid:id="@+id/button_refresh"android:layout_width="0dp"android:layout_height="46dp"android:layout_weight="1"android:text="刷新"android:textAllCaps="false"android:textColor="@android:color/white" /></LinearLayout></androidx.constraintlayout.widget.ConstraintLayout>

item_student1.xml

<!-- item_student.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:padding="16dp"><!-- 学生姓名 --><TextViewandroid:id="@+id/text_view_student_name"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:textSize="16sp" /><!-- 学生学号 --><TextViewandroid:id="@+id/text_view_student_id"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:textSize="14sp"android:layout_marginStart="16dp" /><!-- 学生专业 --><TextViewandroid:id="@+id/text_view_student_major"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:textSize="14sp"android:layout_marginStart="16dp" /><!-- 选中框 --><CheckBoxandroid:id="@+id/check_box_select"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:checked="false"android:layout_marginStart="16dp" /></LinearLayout>

 item_student2.xml

<!-- item_student.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:padding="16dp"><!-- 学生姓名 --><TextViewandroid:id="@+id/text_view_student_name"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:textSize="16sp" /><!-- 学生学号 --><TextViewandroid:id="@+id/text_view_student_id"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:textSize="14sp"android:layout_marginStart="16dp" /><!-- 学生专业 --><TextViewandroid:id="@+id/text_view_student_major"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:textSize="14sp"android:layout_marginStart="16dp" /><!-- 选中框 --></LinearLayout>

 bottom_navigation_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@id/action_student_list"android:icon="@android:drawable/ic_dialog_dialer"android:title="学生列表" /><itemandroid:id="@id/action_add_student"android:icon="@android:drawable/ic_input_add"android:title="添加" /><itemandroid:id="@id/action_search_student"android:icon="@android:drawable/ic_menu_search"android:title="搜索" />
</menu>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com