在片段中使用registerForActivityResult时,永远不会调用回调



我正在使用registerForActivityResult,因为StartActivityForResult函数已弃用。因此,我们正在向使用registerForActivityResult的新方式迁移。这在活动中非常有效。然而,当在片段中使用它时,永远不会调用回调。我还必须提到,父活动和其他子片段以旧的方式处理一些结果。当我调试代码时,我看到调用了父级的onActivityResult或onRequestPermissionsResult,但从未调用回调。这是父活动中的代码:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
when (resultCode) {
Activity.RESULT_OK -> {
when (requestCode) {
RC_ONBOARDING_COMPLETE -> {
HomeActivity.start(this)
finish()
}
else -> super.onActivityResult(requestCode, resultCode, data)
}
}
else -> super.onActivityResult(requestCode, resultCode, data)
}
}

子片段:

val requestPermissionsLauncher: ActivityResultLauncher<Array<String>> =
registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { grantMap ->
accessLocationRequested(!grantMap.containsValue(false) && grantMap.isNotEmpty())
}

在一个按钮后面:

requestPermissionsLauncher.launch(
arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
)
)

我还使用了appcompat 1.3.0-rc01,这是可用的最新版本。你知道为什么父母不把结果传给孩子吗?哦,是的,我在活动中检查了这个,我返回了true:

activityResultRegistry.dispatchResult(
requestCode, Activity.RESULT_OK, Intent()
.putExtra(EXTRA_PERMISSIONS, permissions)
.putExtra(EXTRA_PERMISSION_GRANT_RESULTS, grantResults)
)

我找到了解决方案。它与图书馆无关。在我们的片段基本实现中,我们使用:

override fun getLifecycle(): LifecycleRegistry 

这破坏了回调机制。

最新更新