![](/img/trans.png)
[英]Not ablet to pass Parcelable object as putExtra from IntentService to another Activity
[英]Passing a parcelable object from child activity to primary using putextra
出於學習目的,我嘗試執行以下操作:
我想學習如何從輔助類更新對象列表。
我知道,可包裹對象比序列化對象的性能更高,我想這樣做
我的主要活動中有一個<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沒有提供任何東西,或者我試圖以一種錯誤的方式來逆轉該過程。 所以問題是:如何從輔助活動中創建該對象,返回主對象並查看我的列表已更新?
要啟動和接收來自另一個活動的數據,您應該在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()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.