我想将数据从 Activity 2 传回 Activity 1,但它不起作用。我尝试使用 onActivityResult 来解决,但它从未被调用过。
这是我的 Activity 1 - ProductsActivity
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
Log.v("onActivityResult", "onActivityResult")
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 1) {
// 2
if (resultCode == Activity.RESULT_OK) {
// 3
Log.v("onActivityResult", "onActivityResult")
}
}
}
这是我的第二个 Acitvity - DetailsProductAcitivity
override fun onBackPressed() {
super.onBackPressed()
Log.v("onActivityResult", "on back pressed")
val intent = Intent(this, ProductsActivity::class.java)
startActivityForResult(intent, 1)
}
最佳答案
它没有被调用是因为:
- 你没有设置结果
- 您看起来像是在创建一项新 Activity ,而不是完成当前 Activity (?)
在您的第一个 Activity 中:
private fun launchNewActivity() {
val requestCode = [yourCodeHere]
val intent = Intent(this, ProductDetailsActivity::class.java)
startActivityForResult(intent, requestCode)
}
在你的第二个 Activity 中
private fun passProductAsResult(product: Product) {
val data = Intent()
data.putExtra("product", product.toString());
setResult(Activity.RESULT_OK, data);
finish()
}
回到你的第一个 Activity 覆盖
方法onActivityResult
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if(resultCode != Activity.RESULT_OK) return
when(requestCode) {
[yourRequestCode] -> { yourTextView.text = data.getStringExtra("product"); }
// Other result codes
else -> {}
}
}
如果您使用的是复杂数据类型,请确保数据类型是Serializable
或Parcelable
。
关于带有 Kotlin 的 Android - 将数据传回上一个 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59874541/