[英]When using registerForActivityResult in a fragment the callback is never called
我使用 registerForActivityResult 作为 StartActivityForResult function 已弃用。 所以我们正在向使用 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
这打破了回调机制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.