【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()
等方法接收这些数据。然而,这与获取返回信息的方式有所不同。
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
中传递数据,但实际获取返回结果的方式和机制是不同的。选择合适的方法取决于你的具体需求和代码结构。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuoyibo.net 版权所有 湘ICP备2023021910号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务