You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中RecyclerView删除条目时如何同步删除SQLite数据库数据

问题核心原因
  • 类名不匹配:适配器中声明的数据库实例是DBmain类型,但实际你的数据库工具类命名为SqliteHelper,实例化错误的类导致数据库操作完全没有执行
  • 删除参数错误:你把列表的位置position直接传给数据库的delete方法当做主键id删除,数据库的自增id和列表的位置没有绑定关系,要么删错数据要么找不到对应数据
修改方案

第一步 给Model类补充id字段

你的Model类需要存储对应数据库条目的主键id,修改Model类增加id属性和对应的get方法:

public class Model {
    private int id; // 对应数据库的主键id
    private String sname;
    private String ssubject;
    
    // 原有构造方法、其他get/set方法保留,新增getId方法
    public int getId() {
        return id;
    }
}

注意从数据库查询数据填充modelArrayList的时候,一定要把数据库返回的主键id赋值给Model的id属性。

第二步 修改适配器的删除逻辑

替换错误的数据库类,把传position改为传当前条目的数据库主键id:

@Override
public void onBindViewHolder(@NonNull MyAdapter.ViewHoder holder, int position) {
    Model model = modelArrayList.get(position);
    holder.txtname.setText(model.getSname());
    holder.txtsub.setText(model.getSsubject());

    holder.txtimag.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int currentPosition = holder.getAdapterPosition();
            // 增加无效位置判断,避免列表滑动时点击出现崩溃
            if (currentPosition != RecyclerView.NO_POSITION) {
                // 替换为你实际的数据库类SqliteHelper
                SqliteHelper sqliteHelper = new SqliteHelper(context);
                // 获取当前条目对应的数据库主键id
                Model currentModel = modelArrayList.get(currentPosition);
                sqliteHelper.delete(currentModel.getId());
                // 再更新列表数据
                modelArrayList.remove(currentPosition);
                notifyItemRemoved(currentPosition);
                notifyItemRangeChanged(currentPosition, modelArrayList.size());
            }
        }
    });
}

可选优化

可以修改数据库的delete方法,用占位符避免SQL注入,同时返回删除结果判断是否操作成功:

public boolean delete(int id) {
    SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
    int affectRow = sqLiteDatabase.delete(TABLENAME, "id=?", new String[]{String.valueOf(id)});
    sqLiteDatabase.close();
    return affectRow > 0;
}

内容的提问来源于stack exchange,提问作者pintu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:39:01