在 Android 开发中,Adapter(适配器)本身并不直接负责删除 SQLite 数据库中的数据,Adapter 的作用是将数据源(如 List、Cursor 等)绑定到 UI 组件(如 ListView、RecyclerView),而数据的增删改查操作应由 DAO(数据访问对象) 或 Repository(仓库层) 处理。
但如果你指的是“通过 Adapter 触发删除操作,并同步删除 SQLite 中的数据”,以下是标准做法:
✅ 正确流程:Adapter 触发删除 → 更新数据库 → 刷新 UI
在 Adapter 中定义删除回调接口
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<MyData> dataList;
private OnDeleteListener onDeleteListener;
public interface OnDeleteListener {
void onDelete(int position);
}
public void setOnDeleteListener(OnDeleteListener listener) {
this.onDeleteListener = listener;
}
// ViewHolder 中绑定删除按钮点击事件
public class ViewHolder extends Rec
yclerView.ViewHolder {
Button deleteButton;
public ViewHolder(View itemView) {
super(itemView);
deleteButton = itemView.findViewById(R.id.btn_delete);
deleteButton.setOnClickListener(v -> {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION && onDeleteListener != null) {
onDeleteListener.onDelete(position);
}
});
}
}
// 其他必要方法...
} 在 Activity/Fragment 中实现删除逻辑(操作 SQLite)
public class MainActivity extends AppCompatActivity implements MyAdapter.OnDeleteListener {
private MyDatabaseHelper dbHelper;
private MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new MyDatabaseHelper(this);
RecyclerView recyclerView = findViewById(R.id.recycler_view);
adapter = new MyAdapter(this, fetchDataFro
mDB()); // 假设从 DB 获取数据
adapter.setOnDeleteListener(this);
recyclerView.setAdapter(adapter);
}
@Override
public void onDelete(int position) {
// 1. 获取要删除的数据 ID
MyData data = adapter.getItem(position);
long id = data.getId();
// 2. 删除 SQLite 中的数据
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete(MyDatabaseHelper.TABLE_NAME,
MyDatabaseHelper.COLUMN_ID + " = ?",
new String[]{String.valueOf(id)});
db.close();
// 3. 从本地列表移除并刷新 UI
adapter.removeItem(position); // Adapter 内部需实现此方法
}
} Adapter 中实现 removeItem 方法
public void removeItem(int position) {
if (position >= 0 && position < dataList.size()) {
dataList.remove(position);
notifyItemRemoved(position);
}
} ⚠️ 注意事项
- 不要直接在 Adapter 中操作数据库:Adapter 应只负责展示数据,业务逻辑(包括数据库操作)应放在 Activity/Fragment 或 ViewModel 中。
- 使用 Room 数据库(推荐):如果项目允许,建议使用 Google 的 Room 库,它提供了更简洁、类型安全的 SQLite 访问方式,并可与 LiveData/Flow 结合实现自动 UI 刷新。
- 线程安全:数据库操作应在后台线程执行(如使用
ExecutorService、Coroutines或Room的自动后台调度)。

| 步骤 | 操作 |
|---|---|
| 1 | Adapter 提供删除回调接口 |
| 2 | Activity/Fragment 实现回调,调用 DAO 删除 SQLite 数据 |
| 3 | 从本地数据源移除对应项 |
| 4 | 调用 notifyItemRemoved() 刷新 UI |
这样既保持了架构清晰,又确保了数据与 UI 的一致性。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复