startActivityForResult弃用
之前在启动新页面并且需要获取新页面的返回值时,需要使用startActivityForResult配合onActivityResult方法来使用,但看到最近官方弃用了startActivityForResult方法,更推荐使用registerForActivityResult,如图:
那么就按照官方推荐修改代码看看
registerForActivityResult(ActivityResultContracts.StartActivityForResult())
{
if (it.resultCode == RESULT_OK){
// 获取返回数据
var resultData = it.data
}
}.launch(Intent(this, BluetoothDeviceListActivity::class.java))
看起来确实是更加明了,不需要在onActivityResult方法里判断requestCode了,毕竟一个页面可能有多个reqeust,但是运行后闪退,报错如图:
后查询后,在stackoverflow上找到方法解决,点这里看官方文档,如果是在fragment里使用,看这个,我这里的解决方案是
// 懒加载申明
private lateinit var searchDeviceLauncher: ActivityResultLauncher<Intent>
// 在onCreate方法里初始化
searchDeviceLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){
if (it.resultCode == RESULT_OK){
// 获取返回数据
var resultData = it.data
}
}
// 在需要跳转地方调用
searchDeviceLauncher.launch(Intent(this,BluetoothDeviceListActivity::class.java))
经过上面的步骤后,运行无异常了.