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
相关产品推荐
相关产品推荐

