保存警报对话框中的编辑文本,并将其用作字符串变量(Kotlin)



我是android studio和kotlin的新手,在创建一个警报对话框时遇到了问题,该对话框将编辑文本保存在一个变量上,然后在另一个活动中使用它。

为了明确起见,我想做一个有按钮的活动。如果你点击它,那么警报对话框就会发生,文本应该存储在一个名为"的变量中;名称";。代码:

class MainActivity2 : AppCompatActivity() {
var name: String? = null
lateinit var textView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
create.setOnClickListener{
val editAlert = AlertDialog.Builder(this).create()
val editView = layoutInflater.inflate(R.layout.alert_dialog_create, null)
editAlert.setView(editView)
editAlert.setButton(AlertDialog.BUTTON_POSITIVE, "Accept") { _, _ ->
val text = editAlert.alert_dialog_create_btn.text
name= text.toString()
Toast.makeText(this, "Created", Toast.LENGTH_SHORT).show()
}
editAlert.show()
}
}
}

然后,我希望将该名称用作我的sqlite表名称。所以我有一个mi SQLite Helper,如下所示:


val DATABASE_NAME = "Test"
val COL_ID =" id"
val COL_NAME = "name"

class AdminSQLiteOpenHelper(var context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, 1) {
var table_name = MainActivity2().name
override fun onCreate(db: SQLiteDatabase) {
val createTable = "CREATE TABLE " + table_name +" (" +
COL_ID +" INTEGER PRIMARY KEY AUTOINCREMENT," +
COL_NAME + " VARCHAR(256))"
db?.execSQL(createTable)
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
}
fun insertData(database :Database){
val db = this.writableDatabase
var cv = ContentValues()
cv.put(COL_NAME, database.nombre))
var result = db.insert(table_name, null, cv)
if(result == -1.toLong())
Toast.makeText(context, "Failed", Toast.LENGTH_SHORT).show()
else
Toast.makeText(context, "Success", Toast.LENGTH_SHORT).show()
}
}

然后,在另一个"活动"中,我有一个编辑文本,用户可以在其中输入表的数据,它的顶部应该是一个带有表名的编辑文本(如果用户输入了新名称,则该文本应该会更改(。

代码:

class Main2InsertActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2_insert)
val context = this
setContentView(R.layout.activity_main2_insert)
val tituloView = findViewById<TextView>(R.id.titulo)
tituloView.setText(AdminSQLiteOpenHelper(context).table_name)

insertar.setOnClickListener {
if ((name.text.toString().length > 0)
){
var baseDatos = Database(name.text.toString())
var db = AdminSQLiteOpenHelper(context)
db.insertData(baseDatos)
}else{
Toast.makeText(context, "Rellena todos los campos", Toast.LENGTH_SHORT).show()
}
}
}
}

我认为问题出在MainActivity2中,因为尽管我用按钮创建和警报对话框输入了一个新名称,但名称的值永远不会改变,但我不知道如何修复

每个ActivityFragment(包括对话框(都是一个完全独立的对象,彼此之间没有连接。对两个不同对象中的变量使用相同的名称是不相关的,因为它们完全不相关。

你需要学习如何在Activity等之间传递数据,这是了解安卓应用程序如何工作的棘手部分之一(似乎也解释了这里的很多问题!(。这是一个相当大的基础学科,所以你需要自己学习。这里有一些链接!

将事件传回对话的主机

使用Intents将数据传递给Activities

与碎片通信

使用ViewModels 集中数据

安卓系统已经存在了一段时间,现在有很多方法可以做到这一点——我知道,还有很多东西需要学习。至少熟悉在Intent中传递数据,以及在父Activity(从第一个链接(上调用方法的想法

  1. var table_name=MainActivity2((名称

  2. 类MainActivity2:AppCompatActivity(({

  3. varname:字符串?=空

老实说,我不知道该怎么回复。为什么您认为第1行上的name和第3行上的name[/strong>是同一对象的一部分?为什么要尝试自己实例化一个活动?

你想通过这个项目实现什么?如果它是你想为自己使用的东西,你只想让它发挥作用,你不想在学习Android上投入时间——";这是可以的";。

否则,如果你想制作一个看起来像Android应用程序的东西——一切都离它应该有的样子太远了,StackOverflow也无能为力。你只需要投入更多的时间。

你为什么不使用Room for the Database?

最新更新