package com.example.jidanci
import android.content.ContentValues
import android.content.DialogInterface
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.CheckBox
import android.widget.EditText
import android.widget.ListView
import androidx.appcompat.app.AlertDialog
class myupdate : AppCompatActivity() {
lateinit var update_english: EditText
lateinit var update_chinese: EditText
lateinit var update_ok: Button
lateinit var main_istag: CheckBox
var flag: Int=0;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_myupdate)
update_chinese=findViewById(R.id.chinese_update)
update_english=findViewById(R.id.engilsh_update)
update_ok=findViewById(R.id.ok_update)
main_istag=findViewById(R.id.istag)
//接收来自单词列表的数据
var myreceive=this.intent
var updateid=myreceive.getStringExtra("update_id")
update_english.setText(myreceive.getStringExtra("update_english"))
update_chinese.setText(myreceive.getStringExtra("update_chinese"))
main_istag.setOnCheckedChangeListener { buttonView, isChecked ->
if(main_istag.isChecked)
{
flag=1
}
else
flag=0
}
println("updatereceive:${updateid}")
update_ok.setOnClickListener{
var updateRecordDialog: AlertDialog.Builder = AlertDialog.Builder(this)
updateRecordDialog.setTitle("更新单词")
.setMessage("确定更新?")
.setPositiveButton("更新", DialogInterface.OnClickListener{ dialog, which ->
var main_mysql = DBHelper(this,"words.db",null,1)
var db=main_mysql.openDB()
var myvalue=ContentValues()
myvalue.put("yw",update_english.text.toString())
myvalue.put("zw",update_chinese.text.toString())
myvalue.put("flag",flag)
db.update("mywords",myvalue,"id=?", arrayOf(updateid.toString()))
db.close()
var myback = Intent(this,MainActivity::class.java)
startActivity(myback)
})
.setNegativeButton("取消", DialogInterface.OnClickListener{ dialog, which ->
})
.create()
.show()
}
}
}
package com.example.jidanci
import android.content.ContentValues
import android.content.Intent
import android.database.sqlite.SQLiteDatabase
import android.os.Bundle
import android.widget.Button
import android.widget.CheckBox
import android.widget.EditText
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
val TABLE_NAME = "words"
val dbHelper = DBHelper(this, TABLE_NAME)
lateinit var db: SQLiteDatabase
private lateinit var btnInsert: Button
private lateinit var btnFind: Button
private lateinit var edtEnglish: EditText
private lateinit var edtChinese: EditText
private lateinit var cbFlag: CheckBox
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btnInsert = findViewById(R.id.btn_insert)
btnFind = findViewById(R.id.btn_find)
edtEnglish = findViewById(R.id.edt_english)
edtChinese = findViewById(R.id.edt_chinese)
cbFlag = findViewById(R.id.cd_flag)
btnInsert.setOnClickListener {
val yw = edtEnglish.text.toString().trim()
val zw = edtChinese.text.toString().trim()
if (yw.isEmpty() || zw.isEmpty()) {
Toast.makeText(this, "请输入英文单词和中文含义", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
db = dbHelper.openDB()
val flag = if (cbFlag.isChecked) 1 else 0
val values = ContentValues().apply {
put("yw", yw)
put("zw", zw)
put("flag", flag)
}
try {
val rowId = db.insert(TABLE_NAME, null, values)
if (rowId != -1L) {
Toast.makeText(this, "添加成功", Toast.LENGTH_SHORT).show()
edtEnglish.text.clear()
edtChinese.text.clear()
cbFlag.isChecked = false
} else {
Toast.makeText(this, "添加失败", Toast.LENGTH_SHORT).show()
}
} finally {
db.close()
}
}
btnFind.setOnClickListener {
val intent = Intent(this, ListWordsActivity::class.java) .apply {
putExtra("yw", edtEnglish.text.toString())
putExtra("zw", edtChinese.text.toString())
putExtra("flag", if (cbFlag.isChecked) 1 else 0)
}
startActivity(intent)
}
}}package com.example.jidanci
import android.annotation.SuppressLint
import android.content.Context
import android.content.DialogInterface
import android.database.Cursor
import android.database.sqlite.SQLiteDatabase
import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.ListView
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
class ListWordsActivity : AppCompatActivity() {
private val TABLE_NAME = "words"
private val dbHelper = DBHelper(this, TABLE_NAME)
private lateinit var lv_words: ListView
private var wordsList = ArrayList<String>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_list_words)
lv_words = findViewById(R.id.lv_words)
try {
val words = getWords(TABLE_NAME)
if (words.isEmpty()) {
Toast.makeText(this, "没有找到单词", Toast.LENGTH_SHORT).show()
finish() // 如果没有数据,直接返回
return
}
val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, words)
lv_words.adapter = adapter
lv_words.setOnItemLongClickListener(ItemLongListener(this))
} catch (e: Exception) {
Toast.makeText(this, "查询出错: ${e.message}", Toast.LENGTH_SHORT).show()
e.printStackTrace()
finish()
}
}
@SuppressLint("Range")
private fun getWords(tableName: String): ArrayList<String> {
wordsList.clear()
val db: SQLiteDatabase = dbHelper.openDB()
val yw = intent.getStringExtra("yw")?.trim()
val zw = intent.getStringExtra("zw")?.trim()
val flag = intent.getIntExtra("flag", -1)
val cursor: Cursor = when {
!yw.isNullOrEmpty() -> {
db.query(tableName, null, "yw = ?", arrayOf(yw), null, null, "id desc")
}
!zw.isNullOrEmpty() -> {
db.query(tableName, null, "zw = ?", arrayOf(zw), null, null, "id desc")
}
flag == 1 -> {
db.query(tableName, null, "flag = ?", arrayOf("1"), null, null, "id desc")
}
else -> {
db.query(tableName, null, null, null, null, null, "id desc")
}
}
try {
var index = 0
while (cursor.moveToNext()) {
index++
val currentYw = cursor.getString(cursor.getColumnIndex("yw"))
val currentZw = cursor.getString(cursor.getColumnIndex("zw"))
wordsList.add("$index. $currentYw - $currentZw")
}
} finally {
cursor.close()
db.close()
}
return wordsList
}
private fun delRecord(tableName: String, yw: String, zw: String) {
val db: SQLiteDatabase = dbHelper.openDB()
try {
val rowsDeleted = db.delete(tableName, "yw=? and zw=?", arrayOf(yw, zw))
if (rowsDeleted > 0) {
Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show()
refreshList()
} else {
Toast.makeText(this, "删除失败", Toast.LENGTH_SHORT).show()
}
} finally {
db.close()
}
}
private fun refreshList() {
val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, getWords(TABLE_NAME))
lv_words.adapter = adapter
}
inner class ItemLongListener(context: Context) : AdapterView.OnItemLongClickListener {
private val context = context
override fun onItemLongClick(
parent: AdapterView<*>?,
view: View?,
position: Int,
id: Long
): Boolean {
parent?.getItemAtPosition(position)?.toString()?.let { info ->
// 修改解析逻辑以匹配新的格式
val parts = info.split(" - ")
if (parts.size == 2) {
val ywPart = parts[0].substringAfter(". ").trim()
val zw = parts[1].trim()
AlertDialog.Builder(context)
.setTitle("删除单词")
.setMessage("确定要删除 '$ywPart - $zw' 吗?")
.setPositiveButton("删除") { _, _ ->
delRecord(TABLE_NAME, ywPart, zw)
}
.setNegativeButton("取消", null)
.show()
}
}
return true
}
}
}package com.example.jidanci
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
/**
* 数据库帮助类,用于创建和管理单词数据库
* @param context Android上下文对象
* @param tableName 要操作的数据表名称
*/
class DBHelper(context: Context, tableName: String) {
// 保存上下文对象
var context = context
// 保存数据表名称
var tableName = tableName
/**
* 打开或创建数据库
* @return SQLiteDatabase 数据库实例
*/
fun openDB(): SQLiteDatabase {
// 获取应用数据库目录路径(/data/data/包名/databases)
var path: String = context.getDatabasePath("database").parent
// 打开或创建数据库文件(words.db)
var db: SQLiteDatabase = SQLiteDatabase.openOrCreateDatabase(path + "/words.db", null)
// 构建创建表的SQL语句:
// CREATE TABLE IF NOT EXISTS 表名 (
// id INTEGER PRIMARY KEY AUTOINCREMENT,
// yw TEXT,
// zw TEXT,
// flag NUMERIC
// )
val create_table_sql = "create table if not exists " + tableName +
"(id integer primary key autoincrement," +
"yw text,zw text,flag numeric)"
// 执行SQL语句创建表
db.execSQL(create_table_sql)
// 返回数据库实例
return db
}
}<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.05" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.95" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.05" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.95" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.15" />
<EditText
android:hint="请输入单词的中文含义"
android:id="@+id/edt_english"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="text"
app:layout_constraintBottom_toTopOf="@+id/guideline5"
app:layout_constraintEnd_toStartOf="@+id/guideline4"
app:layout_constraintStart_toStartOf="@+id/guideline3"
app:layout_constraintTop_toTopOf="@+id/guideline5" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.3" />
<EditText
android:hint="请输入英文单词"
android:id="@+id/edt_chinese"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="text"
app:layout_constraintBottom_toTopOf="@+id/guideline6"
app:layout_constraintEnd_toStartOf="@+id/guideline4"
app:layout_constraintStart_toStartOf="@+id/guideline3"
app:layout_constraintTop_toTopOf="@id/guideline6"
app:layout_constraintVertical_bias="0.276" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.45" />
<CheckBox
android:id="@+id/cd_flag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="是否标记"
app:layout_constraintBottom_toTopOf="@+id/guideline7"
app:layout_constraintEnd_toStartOf="@+id/guideline4"
app:layout_constraintHorizontal_bias="0.496"
app:layout_constraintStart_toStartOf="@+id/guideline3"
app:layout_constraintTop_toTopOf="@+id/guideline7" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.6" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />
<Button
android:id="@+id/btn_insert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="记单词"
app:layout_constraintBottom_toTopOf="@+id/guideline8"
app:layout_constraintEnd_toStartOf="@+id/guideline9"
app:layout_constraintStart_toStartOf="@+id/guideline3"
app:layout_constraintTop_toTopOf="@+id/guideline8" />
<Button
android:id="@+id/btn_find"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查单词"
app:layout_constraintBottom_toTopOf="@+id/guideline8"
app:layout_constraintEnd_toStartOf="@+id/guideline4"
app:layout_constraintStart_toStartOf="@+id/guideline9"
app:layout_constraintTop_toTopOf="@+id/guideline8" />
</androidx.constraintlayout.widget.ConstraintLayout>单击更新某个单词(中文,英文,标记),通过对话框确认是否更新