您好,欢迎来到图艺博知识网。
搜索
您的当前位置:首页Android笔记【17】返回数据的两种方法

Android笔记【17】返回数据的两种方法

来源:图艺博知识网


一、问题

【15】【16】中两种处理方法的优劣对比

二、具体分析

1、代码

val intent = Intent(this@SecondActivity, MainActivity::class.java)
intent.putExtra("extra_data", data)
startActivity(intent)
        resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
            if (result.resultCode == RESULT_OK) {
                val message = result.data?.getStringExtra("return_message")
                // 处理返回消息,例如显示 Toast 或 Log
            }
        }

2、区别

这两段代码在 Android 中用于处理活动(Activity)间的交互,但它们的功能和实现方式有显著区别。以下是对这两段代码的详细比较:

1. 目的和使用场景

resultLauncher
resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    if (result.resultCode == RESULT_OK) {
        val message = result.data?.getStringExtra("return_message")
        // 处理返回消息,例如显示 Toast 或 Log
    }
}
  • 目的:用于启动一个新活动并接收返回结果。
  • 使用场景:适合于需要从新活动中获取结果的场景。例如,你可能想从一个表单活动中获取用户输入的信息或选择的项。
startActivity
val intent = Intent(this@SecondActivity, MainActivity::class.java)
intent.putExtra("extra_data", data)
startActivity(intent)
  • 目的:用于启动一个新活动,通常不关心返回结果。
  • 使用场景:适合于简单的导航场景,例如从主界面跳转到设置页面,而不需要处理返回的数据。

2. 数据传递方式

  • resultLauncher:使用 ActivityResult API,可以获取新的活动返回的数据。调用 startActivityForResult 时,你可以通过设置 setResult 在新活动中返回数据。

  • startActivity:通过 IntentputExtra 方法将数据传递给目标活动,但不期望从目标活动返回数据。

3. 返回结果的管理

  • resultLauncher:注册后,使用 launch 方法启动新活动,并在回调中处理返回结果。通过 result 对象,你可以检查结果代码和获取返回的数据。

  • startActivity:启动活动后,无法直接获取返回结果,适合于一旦启动就不需要回传的数据场景。

4. 代码示例对比

使用 resultLauncher 启动活动并处理返回结果:
// 注册结果处理器
resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    if (result.resultCode == RESULT_OK) {
        val message = result.data?.getStringExtra("return_message")
        // 处理返回消息
    }
}

// 启动活动
val intent = Intent(this, SecondActivity::class.java)
resultLauncher.launch(intent)
使用 startActivity 启动活动(不处理返回):
// 创建意图并传递数据
val intent = Intent(this, MainActivity::class.java)
intent.putExtra("extra_data", data)
startActivity(intent) // 启动活动

总结

  • resultLauncher 是用于启动活动并处理返回结果的现代方法,适合需要获取新活动返回信息的情况。
  • startActivity 是传统的启动活动方法,适合于不需要接收返回结果的简单导航。

选择使用哪种方法取决于你的具体需求:是否需要从新活动中获取结果,以及如何管理活动间的数据传递。

3、使用 startActivity 启动活动,也可以返回信息。因为有putExtra

通过 startActivity 启动活动时,确实可以使用 putExtra 传递数据到目标活动,这样目标活动可以使用 getIntent().getStringExtra() 等方法接收这些数据。然而,这与获取返回信息的方式有所不同。

区别总结

示例对比

1. 使用 startActivityForResultonActivityResult(旧方法)
val intent = Intent(this, SecondActivity::class.java)
startActivityForResult(intent, REQUEST_CODE)

在原活动中处理返回结果:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
        val message = data?.getStringExtra("return_message")
        // 处理返回消息
    }
}
2. 使用 ActivityResult API(新方法)

启动活动的原活动:

val resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    if (result.resultCode == RESULT_OK) {
        val message = result.data?.getStringExtra("return_message")
        // 处理返回消息
    }
}

// 启动活动
val intent = Intent(this, SecondActivity::class.java)
resultLauncher.launch(intent)

目标活动返回结果示例

在目标活动中,你可以通过 setResult() 返回数据:

val returnIntent = Intent()
returnIntent.putExtra("return_message", "Hello from SecondActivity")
setResult(RESULT_OK, returnIntent)
finish() // 结束活动

总结

  • putExtra 主要用于在启动活动时传递数据到目标活动。
  • 返回结果 则需要使用 setResult() 和适当的方法来处理返回的数据。startActivity 本身并不处理返回结果,而是需要结合 onActivityResult 或新的 ActivityResult API 来实现。

因此,虽然可以在 startActivity 中传递数据,但实际获取返回结果的方式和机制是不同的。选择合适的方法取决于你的具体需求和代码结构。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuoyibo.net 版权所有 湘ICP备2023021910号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务