【Android开发】startActivityForResult 废弃,使用registerForActivityResult代替

【Android开发】startActivityForResult 废弃,使用registerForActivityResult代替

startActivityForResult 已经被弃用了,现在应该使用 registerForActivityResult 来启动 Activity 并接收结果。

registerForActivityResult 是 Activity Result API 的一部分,它提供了一种更安全、更简洁的方式来处理 Activity 之间的结果传递。
以下是使用 registerForActivityResult 的基本步骤:
1. 创建 ActivityResultLauncher
使用 registerForActivityResult() 函数创建一个 ActivityResultLauncher 对象。该函数接受两个参数:

  • contract: 一个 ActivityResultContract 对象,定义了启动 Activity 和处理结果的协议。
  • callback: 一个回调函数,用于处理 Activity 返回的结果。
val startForResult = registerForActivityResult(
    ActivityResultContracts.StartActivityForResult()
) { result: ActivityResult ->
    if (result.resultCode == Activity.RESULT_OK) {
        val intent = result.data
        // 处理返回的 Intent 数据
    }
}

2. 启动 Activity
使用 ActivityResultLauncher 的 launch() 方法启动 Activity。

val intent = Intent(this, SecondActivity::class.java)
startForResult.launch(intent)

示例:
假设您要从 MainActivity 启动 SecondActivity,并在 SecondActivity 完成后接收一个字符串结果。
MainActivity:

val startForResult = registerForActivityResult(
    ActivityResultContracts.StartActivityForResult()
) { result: ActivityResult ->
    if (result.resultCode == Activity.RESULT_OK) {
        val data = result.data
        val resultString = data?.getStringExtra("result")
        // 处理 resultString
    }
}

val intent = Intent(this, SecondActivity::class.java)
startForResult.launch(intent)

SecondActivity:

val resultIntent = Intent()
resultIntent.putExtra("result", "Hello from SecondActivity")
setResult(Activity.RESULT_OK, resultIntent)
finish()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值