目录
一、问题
二、具体分析
1、代码
2、区别
1. 目的和使用场景
resultLauncher
startActivity
2. 数据传递方式
3. 返回结果的管理
4. 代码示例对比
使用 resultLauncher 启动活动并处理返回结果:
使用 startActivity 启动活动(不处理返回):
总结
3、使用 startActivity 启动活动,也可以返回信息。因为有putExtra
区别总结
示例对比
1. 使用 startActivityForResult 和 onActivityResult(旧方法)
2. 使用 ActivityResult API(新方法)
目标活动返回结果示例
总结
【15】【16】中两种处理方法的优劣对比
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
}
}
这两段代码在 Android 中用于处理活动(Activity)间的交互,但它们的功能和实现方式有显著区别。以下是对这两段代码的详细比较:
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)
resultLauncher
:使用 ActivityResult API
,可以获取新的活动返回的数据。调用 startActivityForResult
时,你可以通过设置 setResult
在新活动中返回数据。
startActivity
:通过 Intent
的 putExtra
方法将数据传递给目标活动,但不期望从目标活动返回数据。
resultLauncher
:注册后,使用 launch
方法启动新活动,并在回调中处理返回结果。通过 result
对象,你可以检查结果代码和获取返回的数据。
startActivity
:启动活动后,无法直接获取返回结果,适合于一旦启动就不需要回传的数据场景。
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
是传统的启动活动方法,适合于不需要接收返回结果的简单导航。选择使用哪种方法取决于你的具体需求:是否需要从新活动中获取结果,以及如何管理活动间的数据传递。
通过 startActivity
启动活动时,确实可以使用 putExtra
传递数据到目标活动,这样目标活动可以使用 getIntent().getStringExtra()
等方法接收这些数据。然而,这与获取返回信息的方式有所不同。
数据传递:
putExtra
:用于在启动活动时传递数据到目标活动。调用 putExtra
是在启动活动之前设置数据,目标活动可以通过 getIntent().getStringExtra()
等方法获取这些数据。setResult()
方法设置返回结果,然后调用 finish()
来结束活动。在这种情况下,原活动可以使用 onActivityResult
方法来接收返回数据。获取返回结果:
startActivityForResult
(旧方法):在启动活动时使用 startActivityForResult(intent, requestCode)
,然后在原活动中重写 onActivityResult
来处理返回的数据。ActivityResult API
(新方法):使用 registerForActivityResult
和 ActivityResultContracts
,更简洁地处理返回结果。startActivityForResult
和 onActivityResult
(旧方法)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")
// 处理返回消息
}
}
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
中传递数据,但实际获取返回结果的方式和机制是不同的。选择合适的方法取决于你的具体需求和代码结构。