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

Android Studio使用Kotlin操作SQLite数据库实现数据删除的问题求助

实现删除选中药物条目的步骤

1. 给数据库管理类添加删除方法

首先在 DatabaseManager 类中新增按主键ID删除条目的方法,ID是唯一标识,删除精准不会误操作:

// 加入到DatabaseManager类中
fun delete(medId: Int): Int {
    val selection = "$colID = ?"
    val selectionArgs = arrayOf(medId.toString())
    // 返回值为删除的条目数量,删除成功返回1,失败返回0
    return sqlDB!!.delete(dbTable, selection, selectionArgs)
}

2. 给列表添加删除触发逻辑

提供两种常用的触发方式,二选一即可:

方式A:长按列表条目触发删除(不需要修改布局)

在 MedListActivity 的 onCreate 方法中添加ListView的长按监听:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.med_list)
    LoadQuery("%")
    // 新增以下长按删除逻辑
    tvListMedication.onItemLongClickListener = AdapterView.OnItemLongClickListener { _, _, position, _ ->
        val selectedMed = listOfMedication[position]
        // 弹出确认框避免误删
        AlertDialog.Builder(this)
            .setTitle("确认删除")
            .setMessage("确定要删除药物「${selectedMed.name}」吗?")
            .setPositiveButton("删除") { _, _ ->
                val dbManager = DatabaseManager(this)
                val deleteResult = dbManager.delete(selectedMed.id)
                if (deleteResult > 0) {
                    Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show()
                    // 刷新列表
                    LoadQuery("%")
                } else {
                    Toast.makeText(this, "删除失败", Toast.LENGTH_SHORT).show()
                }
            }
            .setNegativeButton("取消", null)
            .show()
        return@OnItemLongClickListener true
    }
}

注意需要导入AlertDialog的包:import androidx.appcompat.app.AlertDialog

方式B:每个条目内加删除按钮触发

如果你希望每个条目右侧显示删除按钮,可以先在medication_info.xml中新增一个id为btnDelete的Button控件,然后修改MedicationAdapter的getView方法:

override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View {
    val medication = listOfMedicationAdapter[p0]
    var myView = layoutInflater.inflate(R.layout.medication_info,null)
    myView.tvName.text = medication.name!!
    myView.tvStrength.text = medication.strength!!
    myView.tvDirections.text = medication.directions!!
    // 新增删除按钮点击逻辑
    myView.btnDelete.setOnClickListener {
        AlertDialog.Builder(this@MedListActivity)
            .setTitle("确认删除")
            .setMessage("确定要删除药物「${medication.name}」吗?")
            .setPositiveButton("删除") { _, _ ->
                val dbManager = DatabaseManager(this@MedListActivity)
                val deleteResult = dbManager.delete(medication.id)
                if (deleteResult > 0) {
                    Toast.makeText(this@MedListActivity, "删除成功", Toast.LENGTH_SHORT).show()
                    LoadQuery("%")
                } else {
                    Toast.makeText(this@MedListActivity, "删除失败", Toast.LENGTH_SHORT).show()
                }
            }
            .setNegativeButton("取消", null)
            .show()
    }
    return myView
}

注意事项

请确认你的Medication数据类已经声明了id属性,你之前的代码中已经在查询时将数据库ID传入了Medication构造函数,只要数据类对应声明了该属性即可正常使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:54:03