[英]How to pass the data when back button is pressed in android to previous activity?
[英]Android with Kotlin - pass data back to previous Activity
我想将数据从活动 2 传递回活动 1,但它不起作用。 我试图用 onActivityResult 解决,但它从未被调用。
这是我的活动 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")
}
}
}
这是我的第二个活动 - DetailsProductAcitivity
override fun onBackPressed() {
super.onBackPressed()
Log.v("onActivityResult", "on back pressed")
val intent = Intent(this, ProductsActivity::class.java)
startActivityForResult(intent, 1)
}
它没有被调用,因为:
在您的第一个活动中:
private fun launchNewActivity() {
val requestCode = [yourCodeHere]
val intent = Intent(this, ProductDetailsActivity::class.java)
startActivityForResult(intent, requestCode)
}
在你的第二个活动中
private fun passProductAsResult(product: Product) {
val data = Intent()
data.putExtra("product", product.toString());
setResult(Activity.RESULT_OK, data);
finish()
}
回到你的第一个活动override
方法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
。
活动一
startActivityForResult(intent, 1)
活动二
override fun onBackPressed() {
super.onBackPressed()
val intent = Intent()
intent.putExtra("Key",data)
setResult(RESULT_OK, intent);
finish()
}
再次活动1
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
Log.v("onActivityResult", "onActivityResult")
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 1) {
if (resultCode == Activity.RESULT_OK) {
//get extra data from data intent here
}
}
}
在您的活动 2 中,您必须执行以下操作
override fun onBackPressed() {
Log.v("onActivityResult", "on back pressed")
val data = new Intent()
data.putExtra(INTENT_PRODUCT_CHANGED, productChanged)
//startActivityForResult(intent, 1)
setResult(Activity.RESULT_OK, data)
finish()
}
你只需要删除super.onBackPressed()
你应该使用不
startActivityForResult(intent, 1)
但
setResult(RESULT_OK, intent);
finish();
我还有一个问题。
现在将调用 onActivityResult 但数据为空。 结果代码为 0。
活动一:
startActivityForResult(intent, 1)
和这个
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(requestCode == 1) {
if (resultCode == Activity.RESULT_OK) {
val resultString = data!!.getStringExtra(DetailsProductActivity.INTENT_PRODUCT_CHANGED)
}
}
}
活动二:
override fun onBackPressed() {
super.onBackPressed()
Log.v("onActivityResult", "on back pressed")
val data = Intent()
data.putExtra(INTENT_PRODUCT_CHANGED, productChanged)
//startActivityForResult(intent, 1)
setResult(Activity.RESULT_OK, data)
finish()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.