用GreenDao实现SQLite数据存储数据和用RecyclerView显示数据,并可在对话框中进行数据的增删改操作

本文介绍了一个使用RecyclerView和GreenDAO实现的学生信息管理系统,包括添加、修改和删除学生信息的功能。系统使用自定义对话框进行数据输入,并通过实体类和适配器实现了数据的动态更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

activity_main布局
在这里插入图片描述
RecycleView布局
在这里插入图片描述
点击+按钮后要用到的自定义对话框
在这里插入图片描述
点击修改之后要用到的对话框
在这里插入图片描述

适配器代码
ackage com.example.mobile1920605114zyh0510homeword;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import java.util.List;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

public class Myapadter extends RecyclerView.Adapter<Myapadter.MyHoler> {

    private List<Student> list;
    public Myapadter(List<Student> list) {
        this.list = list;
    }
//定义打开接口

OnClickInterface onClickInterface;
    interface OnClickInterface {
         void onClick(View view, int position);
    }

    public void setOnClickInterface(OnClickInterface onClickInterface ) {
        this.onClickInterface = onClickInterface;
    }




    static class MyHoler extends RecyclerView.ViewHolder {
        TextView tvSno, tvName, tvSex, tvRoom;
        Button btnUpdate, btndelete;
        public MyHoler(@NonNull View itemView) {
            super(itemView);
            tvSno = itemView.findViewById(R.id.tvItemSno);
            tvName = itemView.findViewById(R.id.tvItemName);
            tvSex = itemView.findViewById(R.id.tvItemSex);
            tvRoom = itemView.findViewById(R.id.tvItemRoom);
            btnUpdate = itemView.findViewById(R.id.btnItemUpdate);
            btndelete = itemView.findViewById(R.id.btnItemdelete);
        }
    }

    @NonNull
    @Override
    public Myapadter.MyHoler onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_rv_main_student, parent, false);
        MyHoler holer = new MyHoler(view);
        return holer;
    }

    @Override
    public void onBindViewHolder(@NonNull MyHoler holder, final int position) {
        Student student = list.get(position);
        holder.tvRoom.setText(student.getRoom());
        holder.tvSex.setText(student.getSex());
        holder.tvName.setText(student.getName());
        holder.tvSno.setText(student.getSno());
        //按钮监听
holder.btnUpdate.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (onClickInterface != null) {
            onClickInterface.onClick(v,position);
        }
    }
});
holder.btndelete.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (onClickInterface != null) {
            onClickInterface.onClick(v,position);
        }
    }
});
    }

    @Override
    public int getItemCount() {
        return list.size();
    }



}

实体类代码

package com.example.mobile1920605114zyh0510homeword;

import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.NotNull;
import org.greenrobot.greendao.annotation.Generated;

@Entity //表示这个实体类会在数据库中生成对应的表
public class Student {
    @Id(autoincrement = true)//对应数据库表中的id列,可设置自增1
    private Long id;
@NotNull//不允许为空
    private String sno,name,sex, room;
//添加无属性构造方法:

    public Student(String sno, String name, String sex, String room) {
        this.sno = sno;
        this.name = name;
        this.sex = sex;
        this.room = room;
    }

    @Generated(hash = 1110990331)
public Student(Long id, @NotNull String sno, @NotNull String name,
        @NotNull String sex, @NotNull String room) {
    this.id = id;
    this.sno = sno;
    this.name = name;
    this.sex = sex;
    this.room = room;
}
@Generated(hash = 1556870573)
public Student() {
}
public Long getId() {
    return this.id;
}
public void setId(Long id) {
    this.id = id;
}
public String getSno() {
    return this.sno;
}
public void setSno(String sno) {
    this.sno = sno;
}
public String getName() {
    return this.name;
}
public void setName(String name) {
    this.name = name;
}
public String getSex() {
    return this.sex;
}
public void setSex(String sex) {
    this.sex = sex;
}
public String getRoom() {
    return this.room;
}
public void setRoom(String room) {
    this.room = room;
}

}

MainActivity代码

**//MainActivity**
package com.example.mobile1920605114zyh0510homeword;

import android.app.AlertDialog;

import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.RadioButton;
import android.widget.TextView;

import org.greenrobot.greendao.database.Database;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

public class MainActivity extends AppCompatActivity {

Student student;
    private TextView tvMainTitle;
    private ImageButton btnMainAdd;
    private TextView tvMainSno;
    private TextView tvMainName;
    private TextView tvMainSex;
    private TextView tvMainRoom;
    private RecyclerView rvMainDemo;
    List<Student> list = new ArrayList<>();//创建集合

    StudentDao studentDao;

    private String sno, name, room,sex;

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

        initView();

        setStudentDaoFuZhi();
       XianShi();
        setBtnMainAdd(btnMainAdd);
        xiushan();

    }

    //通过FindViewByMe初始化控件
    private void initView() {
        tvMainTitle = findViewById(R.id.tvMainTitle);
        btnMainAdd = findViewById(R.id.btnMainAdd);
        tvMainSno = findViewById(R.id.tvMainSno);
        tvMainName = findViewById(R.id.tvMainName);
        tvMainSex = findViewById(R.id.tvMainSex);
        tvMainRoom = findViewById(R.id.tvMainRoom);
        rvMainDemo = findViewById(R.id.rvMainDemo);
    }

    //定义数据打开帮助对象,指定数据库名称
    private void setStudentDaoFuZhi() {
        //定义数据打开帮助对象,指定数据库名称
        DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "school.dp");
        //定义数据库对象
        Database database = devOpenHelper.getWritableDb();
        //定义Session会话对象
        DaoSession daoSession = new DaoMaster(database).newSession();
        studentDao = daoSession.getStudentDao();

    }

    //添加按钮
    public void setBtnMainAdd(ImageButton btnMainAdd) {
        this.btnMainAdd = btnMainAdd;
        btnMainAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                自定义对话框
                View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.add_main, null, false);
                final AlertDialog dialog = new AlertDialog.Builder(MainActivity.this).setView(view).create();
                final EditText edtSco = view.findViewById(R.id.edtAddSno);
                final EditText edtName = view.findViewById(R.id.edtAddName);
                final EditText edtRoom = view.findViewById(R.id.edtAddRoom);
                final RadioButton radboy = view.findViewById(R.id.radAddBoy);
                final RadioButton radgirl = view.findViewById(R.id.radAddGirl);
                final Button btnCancel = view.findViewById(R.id.btnAddcancle);
                Button btnSure = view.findViewById(R.id.btnAddSure);
                dialog.setTitle("新增");//设置标题
                btnCancel.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        dialog.dismiss();//关闭对话框
                    }
                });
                btnSure.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        sno = edtSco.getText().toString().trim();
                        name = edtName.getText().toString().trim();
                        room = edtRoom.getText().toString().trim();

                        sex = "男";
                        //多选框
                        if (radboy.isChecked()) {
                            sex = radboy.getText().toString();
                        } else if (radgirl.isChecked()) {
                            sex = radgirl.getText().toString();
                        }
                        student = new Student(sno, name, sex, room);
                        Long result = studentDao.insert(student);
                        if (result>0){
                            Log.i("TAG", "成功添加数据");
                        }else {
                            Log.i("TAG", "添加数据异常");
                        }
                          list.clear();
                                    list.addAll(studentDao.loadAll());
                                    rvMainDemo.getAdapter().notifyDataSetChanged();
                        dialog.dismiss();
                        
                    }
                });
                dialog.create();
                dialog.show();//显示对话框
            }
        });

    }
//rv显示
    public void XianShi(){
         list = studentDao.loadAll();
        for (int i = 0; i < list.size(); i++) {
            Long id = list.get(i).getId();
            Log.i("TAG", "select:" + id);
        }
        rvMainDemo.setLayoutManager(new LinearLayoutManager(this));
        Myapadter myapadter = new Myapadter(list);
        rvMainDemo.setAdapter(myapadter);
//        rvMainDemo.setAdapter(new Myapadter(list));


    }
    //设置rv中的修改按钮
    public void xiushan(){

        ((Myapadter)rvMainDemo.getAdapter()).setOnClickInterface(new Myapadter.OnClickInterface() {
            @Override
            public void onClick(View view, int position) {
                final Student stu = list.get(position);
                student = studentDao.queryBuilder().where(StudentDao.Properties.Id.eq(stu.getId())).unique();
                switch (view.getId()) {
                    case R.id.btnItemUpdate:
                //自定义对话框
                View updataView = LayoutInflater.from(MainActivity.this).inflate(R.layout.updata, null, false);
           //声明变量
               final AlertDialog dialog = new AlertDialog.Builder(MainActivity.this).setView(updataView).create();
               final TextView tvtitle = updataView.findViewById(R.id.tvUpdataTitle);
                final  EditText edtname =   updataView.findViewById(R.id.edtUpdataName);
                final  EditText edtroom = updataView.findViewById(R.id.edtUpdataRoom);
                final  Button btndeler = updataView.findViewById(R.id.btnUpdataDeler);
                final   Button btnsure = updataView.findViewById(R.id.btnUpdataSure);
                final  RadioButton radboy = updataView.findViewById(R.id.RadUpdataBoy);
                final  RadioButton radgirl = updataView.findViewById(R.id.RadUpdataGirl);

                tvtitle.setText("修改" + stu.getSno() + "的信息");
                edtname.setText(stu.getName());
                edtroom.setText(stu.getRoom());
                Log.i("TAG", "onClick: "+stu.getSex());
                if (stu.getSex().equalsIgnoreCase("男")){
                    radboy.setChecked(true);
                }  else{
                    radgirl.setChecked(true);
                }
btnsure.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        stu.setName(edtname.getText().toString().trim());
        stu.setRoom(edtroom.getText().toString().trim());
        if (radboy.isChecked()) {
            stu.setSex(radboy.getText().toString());
        } else if (radgirl.isChecked()){
            stu.setSex(radgirl.getText().toString());
        }
        studentDao.update(student);//将数据更新到student
           list.clear();
                                    list.addAll(studentDao.loadAll());
                                    rvMainDemo.getAdapter().notifyDataSetChanged();
dialog.dismiss();

    }
});
                btndeler.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        dialog.dismiss();
                    }
                });

                Log.i("TAG", "onClick: "+"点击了一次按钮");
                dialog.create();
                dialog.show();
                break;
                    case R.id.btnItemdelete:
                        new AlertDialog.Builder(MainActivity.this)
                                .setMessage("删除" + stu.getSno() + stu.getName() + "的信息")
                                .setNeutralButton("取消", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        dialog.dismiss();
                                    }
                                }).setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                if (stu != null) {
                                    studentDao.delete(stu);
                                    dialog.dismiss();
                                      list.clear();
list.addAll(studentDao.loadAll());
  rvMainDemo.getAdapter().notifyDataSetChanged();
                                }
                            }
                        }).create()
                                .show();
            }
        });
    }
  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值