2026-06-23 08:05:44

startActivity和registerForActivityResult的用法

在 Android Kotlin 开发中,startActivity 和 registerForActivityResult 是启动新 Activity 并处理返回结果的两种方式。

1. 使用 startActivitystartActivity 适用于 不需要获取返回值 的情况,例如从 MainActivity 跳转到 SecondActivity:

示例:启动新 Activity12val intent = Intent(this, SecondActivity::class.java)startActivity(intent)

如果你需要传递数据:

1234val intent = Intent(this, SecondActivity::class.java).apply { putExtra("key", "Hello, SecondActivity!")}startActivity(intent)

在 SecondActivity 中获取:

1val data = intent.getStringExtra("key")

2. 使用 registerForActivityResultregisterForActivityResult 适用于 需要从子 Activity 返回数据 的情况,比如用户选择了一个文件或拍照后返回图片。

示例:启动 Activity 并获取返回值先在主 Activity 中注册一个 ActivityResultLauncher:

123456private val launcher=registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ result -> if (result.resultCode == Activity.RESULT_OK) { val data = result.data?.getStringExtra("result_key") Toast.makeText(this, "收到返回值: $data", Toast.LENGTH_SHORT).show() }}

然后使用 launcher.launch(intent) 启动新 Activity:

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

在 SecondActivity 处理返回数据12345val resultIntent = Intent().apply { putExtra("result_key", "返回的数据")}setResult(Activity.RESULT_OK, resultIntent)finish()

3. startActivityForResult 已废弃startActivityForResult 在 API 30(Android 11)开始被 弃用,官方推荐使用 registerForActivityResult 代替。

如果你的代码仍然使用:

12startActivityForResult(intent, REQUEST_CODE)

则应改用 registerForActivityResult。

4. 其他 ActivityResultContractsregisterForActivityResult 还支持多种 ActivityResultContracts,如:

ActivityResultContracts.RequestPermission()(请求单个权限)

ActivityResultContracts.GetContent()(选择文件)

ActivityResultContracts.TakePicture()(拍照)

示例:获取图片123456789private val getImage = registerForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? -> uri?.let { imageView.setImageURI(it) }}button.setOnClickListener { getImage.launch("image/*")}

总结:

startActivity() 适用于无返回值的跳转。

registerForActivityResult() 适用于需要获取返回值的情况,并且比 startActivityForResult() 更推荐。

中兴V5(U9180/青春版/移动4G)
抗美援朝电影《长津湖》开拍,吴京、易烊千玺领衔主演