【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()