出于学习目的,我尝试执行以下操作:
我想学习如何从辅助类中更新对象列表。
我知道一个可包裹对象比序列化对象的性能更高,我想这样做
我的主要活动中有<entry>
类的可变列表。
我想做的是更新此列表,添加一个使用putextra方法收到的新对象
//from here I gather my fields
val i = Intent(this, NewEntry::class.java)
//I try to get my new object
val entry: Entry = i.getParcelableExtra("new")
entryList.add(entry) //update list
创建对象的辅助活动由主要活动中的onclick侦听器触发
然后另一个onclick侦听器将我带回到主要活动
val i = Intent(this, MainActivity::class.java)
btnAdd.setOnClickListener {
//intent.putExtra("name", etName.text.toString())
//intent.putExtra("description", etDescription.text.toString())
//intent.putExtra("id", etId.text.toString().toInt())
val name: String = etName.text.toString()
val description: String = etDescription.text.toString()
val id: Int = etId.text.toString().toInt()
val entry = Entry(name, description, id)
i.putExtra("new", entry)
}
我留下注释后的代码以帮助您了解我已经尝试过的内容。
应用程序立即崩溃,我得到的错误是
java.lang.IllegalStateException: intent.getParcelableExtra("new") must not be null
我认为在onCreate上putExtra没有任何作用,或者我试图以一种错误的方式撤消该过程。 所以问题是:如何从辅助活动中创建该对象,返回主对象并查看我的列表已更新?
答案 0 :(得分:0)
要启动和接收来自其他活动的数据,应在Android中使用startActivityForResult方法。
MainActivity.kt
class MainActivity : AppCompatActivity() {
companion object {
val REQUEST_CODE_NEW_ENTRY = 1
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Start EntryActivity
val i = Intent(this, NewEntry::class.java)
startActivityForResult(i, REQUEST_CODE_NEW_ENTRY)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
// Receive data from EntryActivity
if (requestCode == REQUEST_CODE_NEW_ENTRY) {
if (resultCode == Activity.RESULT_OK) {
val entry: Entry? = data?.getParcelableExtra("new")
entryList.add(entry!!)
}
}
}
}
NewEntry.kt
btnAdd.setOnClickListener {
//intent.putExtra("name", etName.text.toString())
//intent.putExtra("description", etDescription.text.toString())
//intent.putExtra("id", etId.text.toString().toInt())
val name: String = etName.text.toString()
val description: String = etDescription.text.toString()
val id: Int = etId.text.toString().toInt()
val entry = Entry(name, description, id)
// Send entry back to MainActivity
val intent = Intent().apply { putExtra("new", entry) }
setResult(Activity.RESULT_OK, intent)
// Finish current activity
finish()
}