返回

AndroidActivityResult API:改善 Activity、Fragment 之间的数据交换

Android

在 Android 开发中,Activity 和 Fragment 之间的数据交互至关重要,因为它允许在不同组件之间共享信息。在传统方法中,startActivityForResult() 方法广泛用于从启动的 Activity 获取结果。然而,这种方法存在一些限制和复杂性,导致了ActivityResult API 的引入。

ActivityResult API 简介

ActivityResult API 是一种更现代化、更灵活的方法,可用于 Activity 和 Fragment 之间的数据交换。它解决了许多传统方法的缺点,并提供了更简化和高效的交互机制。

主要优势

ActivityResult API 具有以下主要优势:

  • 简化代码: 它消除了对 startActivityForResult() 和 onActivityResult() 方法的需要,简化了代码并提高了可读性。
  • 类型安全: 它通过明确定义请求码和结果数据类型,确保了类型安全并减少了错误。
  • 结果生命周期管理: 它提供了对结果生命周期的细粒度控制,允许开发人员在适当的时间清除结果。
  • 易于测试: 它通过引入测试 API,使测试数据交互变得更加容易。

使用 ActivityResult API

要使用 ActivityResult API,请执行以下步骤:

  1. 创建启动器: 使用 registerForActivityResult() 方法创建一个启动器对象。该方法指定要启动的 Activity 或 Fragment,以及接收结果的回调函数。
  2. 启动活动或片段: 使用启动器对象启动活动或片段。
  3. 处理结果: 在启动的活动或片段中,使用 setResult() 方法设置结果。
  4. 获取结果: 在注册回调中获取结果。

示例代码

以下示例展示了如何使用 ActivityResult API:

class MainActivity : AppCompatActivity() {

    private val launcher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
        if (result.resultCode == RESULT_OK) {
            val data = result.data?.getStringExtra("result")
        }
    }

    fun launchActivity() {
        val intent = Intent(this, SecondActivity::class.java)
        launcher.launch(intent)
    }
}

结论

ActivityResult API 为 Android 开发人员提供了一种强大的机制,用于在 Activity 和 Fragment 之间交换数据。通过简化代码、提高类型安全、管理结果生命周期并增强测试能力,它显著改善了数据交互体验。拥抱 ActivityResult API,提升您的应用程序的效率和可靠性。