实验五 Android Studio RecyclerView列表视图【班级名单列表视图01】

一、实验目的

深入学习Fragment的用法,自定义列表(RecyclerView)视图的实现。

二、实验内容

实现一个班级名单的列表视图

  1. 每个列表项包含:个人照片,学号和姓名,电话;

  2. 可以删除列表项,添加列表项;

  3. 可以从列表项拨打对应的电话号码。

三、结构搭建

四、代码实现

 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:id="@+id/fragment_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


</androidx.constraintlayout.widget.ConstraintLayout>

 fragment_listxml

<?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"
    android:orientation="vertical"
    tools:context=".FragmentList">

    <EditText
        android:id="@+id/edit_id"
        android:layout_width="wrap_content"
        android:layout_height="35dp"
        android:layout_marginStart="60dp"
        android:layout_marginTop="16dp"
        android:ems="10"
        android:hint="请输入学号"
        android:inputType="text"
        android:textSize="13sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/edit_name"
        android:layout_width="wrap_content"
        android:layout_height="35dp"
        android:layout_marginTop="8dp"
        android:ems="10"
        android:hint="请输入姓名"
        android:inputType="text"
        android:textSize="13sp"
        app:layout_constraintStart_toStartOf="@+id/edit_id"
        app:layout_constraintTop_toBottomOf="@+id/edit_id" />

    <EditText
        android:id="@+id/edit_tel"
        android:layout_width="wrap_content"
        android:layout_height="35dp"
        android:layout_marginTop="8dp"
        android:ems="10"
        android:hint="请输入手机号"
        android:inputType="text"
        android:textSize="13sp"
        app:layout_constraintStart_toStartOf="@+id/edit_name"
        app:layout_constraintTop_toBottomOf="@+id/edit_name" />

    <ImageView
        android:id="@+id/image_stu"
        android:layout_width="84dp"
        android:layout_height="65dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="60dp"
        android:src="@drawable/ls"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toEndOf="@+id/edit_name"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn_commit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="12dp"
        android:text="添加"
        app:layout_constraintStart_toStartOf="@+id/image_stu"
        app:layout_constraintTop_toBottomOf="@+id/image_stu" />

    <androidx.appcompat.widget.AppCompatImageButton
        android:id="@+id/btn_id"
        android:layout_width="35dp"
        android:layout_height="35dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:adjustViewBounds="true"
        android:background="@android:drawable/btn_star_big_on"
        android:scaleType="fitXY"
        android:text="学号"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.appcompat.widget.AppCompatImageButton
        android:id="@+id/btn_name"
        android:layout_width="35dp"
        android:layout_height="35dp"
        android:layout_marginTop="60dp"
        android:adjustViewBounds="true"
        android:background="@drawable/stu"
        android:scaleType="fitXY"
        android:text="姓名"
        app:layout_constraintStart_toStartOf="@+id/btn_id"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.appcompat.widget.AppCompatImageButton
        android:id="@+id/btn_phone"
        android:layout_width="35dp"
        android:layout_height="35dp"
        android:layout_marginTop="100dp"
        android:adjustViewBounds="true"
        android:background="@android:drawable/sym_action_call"
        android:scaleType="fitXY"
        android:text="手机号"
        app:layout_constraintStart_toStartOf="@+id/btn_name"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rcv_stu"
        android:layout_width="match_parent"
        android:layout_height="592dp"
        android:layout_marginTop="8dp"
        app:layout_constraintTop_toBottomOf="@+id/btn_commit"
        tools:layout_editor_absoluteX="0dp" />

</androidx.constraintlayout.widget.ConstraintLayout>

 list_item_layout.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="90dp">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="86dp"
        android:layout_height="66dp"
        android:layout_marginStart="28dp"
        android:layout_marginTop="12dp"
        android:src="@drawable/ls"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/tv_id"
        android:layout_width="96dp"
        android:layout_height="21dp"
        android:layout_marginStart="40dp"
        android:text="学号"
        app:layout_constraintStart_toEndOf="@+id/imageView"
        app:layout_constraintTop_toTopOf="@+id/imageView"
        tools:ignore="MissingConstraints" />

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="96dp"
        android:layout_height="20dp"
        android:text="姓名"
        app:layout_constraintBottom_toTopOf="@+id/tv_tel"
        app:layout_constraintEnd_toEndOf="@+id/tv_id"
        app:layout_constraintStart_toStartOf="@+id/tv_id"
        app:layout_constraintTop_toBottomOf="@+id/tv_id"
        tools:ignore="MissingConstraints" />

    <TextView
        android:id="@+id/tv_tel"
        android:layout_width="96dp"
        android:layout_height="20dp"
        android:text="手机号"
        app:layout_constraintBottom_toBottomOf="@+id/imageView"
        app:layout_constraintEnd_toEndOf="@+id/tv_name"
        app:layout_constraintStart_toStartOf="@+id/tv_name" />

    <androidx.appcompat.widget.AppCompatImageButton
        android:id="@+id/btn_delete"
        android:layout_width="56dp"
        android:layout_height="46dp"
        android:layout_marginStart="176dp"
        android:text="删除"
        app:layout_constraintBottom_toBottomOf="@+id/tv_tel"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.184"
        app:layout_constraintStart_toEndOf="@+id/imageView"
        app:layout_constraintTop_toTopOf="@+id/tv_id"
        app:srcCompat="@android:drawable/btn_dialog" />

</androidx.constraintlayout.widget.ConstraintLayout>

FragmentList

package com.suke.recyclerstudent;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class FragmentList extends Fragment {

    //控制台打印提示
    private final String TagCreate = "create";
    private final String TagDelete = "delete";
    //创建学生信息列表
    private List<Student> list_stu = new ArrayList<>();
    //学号、姓名、手机号
    private EditText editId;
    private EditText editName;
    private EditText editTel;
    private ImageView imageView;
    //添加学生信息按钮
    private Button btnCommit;

    private StudentAdapter studentAdapter;
    //学生信息视图列表
    private RecyclerView rcvStu;

    String[] ids = new String[]{"19200135221", "19200135222", "19200135223", "19200135224", "19200135225", "19200135226"};
    String[] names = new String[]{"书启秋枫", "Gaze", "无羡", "阿斌", "家和万事兴", "石业大帝"};
    String[] tels = new String[]{"15312133001", "153121330012", "153121330013", "153121330014", "153121330015", "153121330016"};
    int[] images = new int[]{R.drawable.ls, R.drawable.cc, R.drawable.mr, R.drawable.zb, R.drawable.zjh, R.drawable.lishuo};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        //1.获取fragment_list视图
        View view = inflater.inflate(R.layout.fragment_list, container, false);
        //2.初始化视图
        initView(view);
        //3.初始化数据
        initData();
        //4.返回视图
        return view;
    }

    //2.初始化视图
    private void initView(View view) {
        editId = view.findViewById(R.id.edit_id);
        editName = view.findViewById(R.id.edit_name);
        editTel = view.findViewById(R.id.edit_tel);
        btnCommit = view.findViewById(R.id.btn_commit);
        rcvStu = view.findViewById(R.id.rcv_stu);
        imageView = view.findViewById(R.id.image_stu);

        //设置 recyclerview 显示布局
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
        rcvStu.setLayoutManager(linearLayoutManager);

        //选择随机头像
        final int[] random = {0};
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                random[0] = new Random().nextInt(6);
                imageView.setImageResource(images[random[0]]);
            }
        });

        //添加学生信息(lambda表达式)
        btnCommit.setOnClickListener(v -> {
            String id = editId.getText().toString();
            String name = editName.getText().toString();
            String tel = editTel.getText().toString();
            editId.setText("");
            editName.setText("");
            editTel.setText("");
            list_stu.add(new Student(id, name, tel, random[0]));
            Log.e(TagCreate, "学生创建成功");
            studentAdapter.notifyDataSetChanged();
        });
    }

    //3.初始化数据
    private void initData() {
        for (int i = 0; i < 6; i++) {
            Student student = new Student(ids[i], names[i], tels[i], i);
            list_stu.add(student);
            studentAdapter = new StudentAdapter();
            rcvStu.setAdapter(studentAdapter);
        }
    }

    private class StudentAdapter extends RecyclerView.Adapter<StudentAdapter.MyViewHolder> {

        @NonNull
        @Override
        public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = View.inflate(getContext(), R.layout.list_item_layout, null);
            return new MyViewHolder(view);
        }

        @Override
        public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
            holder.tvId.setText(list_stu.get(position).getSno());
            holder.tvName.setText(list_stu.get(position).getSname());
            holder.tvTel.setText(list_stu.get(position).getStele());
            holder.imageView.setImageResource(images[list_stu.get(position).getImageId()]);

            //拨打电话(隐式调用)
            holder.tvTel.setOnClickListener(v -> {
                String tel = list_stu.get(position).getStele();
                //传入两个参数(一个是拨号盘,一个是电话号)
                Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + tel));
                //实例化之后startActivity执行
                startActivity(intent);
            });

            //切换随机头像
            holder.imageView.setOnClickListener(v -> {
                Random random = new Random();
                holder.imageView.setImageResource(images[random.nextInt(6)]);
            });

            //删除学生信息
            holder.btnDelete.setOnClickListener(v -> {
                list_stu.remove(position);
                studentAdapter.notifyDataSetChanged();
                Log.e(TagDelete, "学生已删除");
            });
        }

        //RecyclerView视图列表展示数量
        @Override
        public int getItemCount() {
            //判断是否为空
            return list_stu == null ? 0 : list_stu.size();
        }

        public class MyViewHolder extends RecyclerView.ViewHolder {
            //学号、姓名、手机号
            private TextView tvId;
            private TextView tvName;
            private TextView tvTel;
            //学生头像
            private ImageView imageView;
            //删除学生
            private ImageButton btnDelete;

            public MyViewHolder(@NonNull View itemView) {
                super(itemView);
                tvId = itemView.findViewById(R.id.tv_id);
                tvName = itemView.findViewById(R.id.tv_name);
                tvTel = itemView.findViewById(R.id.tv_tel);
                imageView = itemView.findViewById(R.id.imageView);
                btnDelete = itemView.findViewById(R.id.btn_delete);
            }
        }
    }
}

MainActivity

package com.suke.recyclerstudent;

import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FragmentManager fm = getSupportFragmentManager();
        Fragment fragment = fm.findFragmentById(R.id.fragment_list);
        if (fragment == null) {
            fragment = new FragmentList();
            fm.beginTransaction()
                    .add(R.id.fragment_list, fragment)
                    .commit();
        }
    }
}

Student

package com.suke.recyclerstudent;

public class Student {
    private String Sno;
    private String Sname;
    private String Stele;
    private int imageId;

    public Student(String sno, String sname, String stele, int imageId) {
        Sno = sno;
        Sname = sname;
        Stele = stele;
        this.imageId = imageId;
    }

    public String getSno() {
        return Sno;
    }

    public void setSno(String sno) {
        Sno = sno;
    }

    public String getSname() {
        return Sname;
    }

    public void setSname(String sname) {
        Sname = sname;
    }

    public String getStele() {
        return Stele;
    }

    public void setStele(String stele) {
        Stele = stele;
    }

    public int getImageId() {
        return imageId;
    }

    public void setImageId(int imageId) {
        this.imageId = imageId;
    }
}

 五、运行结果

 

猜你喜欢

转载自blog.csdn.net/qq_45037155/article/details/124926710