Jetpack Compose中如何从ActivityB向ActivityA返回数据?
问题分析与解决方案
你的问题出在ActivityB的ContinueClicked函数中多余的startActivity(intent2)调用,这会启动一个新的Activity实例,打断了返回ActivityA的流程,导致数据无法正常回传。此外,复用原Intent携带返回数据虽然可行,但更推荐创建新Intent来避免携带冗余数据。
修正后的ActivityB代码
// 无需全局存储原Intent,直接在返回时创建新Intent即可 @Composable fun ContinueClicked(indexReturn: Int) { // 创建新Intent专门用于携带返回数据 val resultIntent = Intent().apply { putExtra("indexReturn", indexReturn) // 用独立的key区分返回数据,避免和传入数据混淆 } setResult(Activity.RESULT_OK, resultIntent) finish() // 直接关闭ActivityB,数据会自动回传给ActivityA }
ActivityA中接收返回数据的代码补充
在ActivityA的startForResult回调中添加数据获取逻辑:
private val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult -> if (result.resultCode == Activity.RESULT_OK) { val intent = result.data if (intent != null) { // 获取返回的整数数据,第二个参数为默认值(key不存在时返回) val returnedIndex = intent.getIntExtra("indexReturn", -1) // 此处处理返回的数据,比如更新UI或执行业务逻辑 } } }
额外注意事项
- 确保ActivityB始终通过
startForResult.launch(intent)启动(你已实现此步骤),而非普通的startActivity方法。 - 若需返回多组数据,直接在
resultIntent中添加更多putExtra即可。 - 禁止在
finish()之前调用任何启动新Activity的方法,这会中断数据回传流程。
内容的提问来源于stack exchange,提问作者neelshenning
相关产品推荐
相关产品推荐

