Android 在片段中使用registerForActivityResult时,永远不会调用回调
我正在使用registerForActivityResult,因为StartActivityForResult函数已被弃用。因此,我们正朝着使用registerForActivityResult的新方式迁移。这在活动中非常有效。但是,当在片段中使用此函数时,永远不会调用回调函数。我还必须提到,父活动和其他子片段以旧的方式处理一些结果。调试代码时,我看到调用了父级的onActivityResult或onRequestPermissionsResult,但从未调用回调。 这是父活动中的代码:Android 在片段中使用registerForActivityResult时,永远不会调用回调,android,android-fragments,android-permissions,Android,Android Fragments,Android Permissions,我正在使用registerForActivityResult,因为StartActivityForResult函数已被弃用。因此,我们正朝着使用registerForActivityResult的新方式迁移。这在活动中非常有效。但是,当在片段中使用此函数时,永远不会调用回调函数。我还必须提到,父活动和其他子片段以旧的方式处理一些结果。调试代码时,我看到调用了父级的onActivityResult或onRequestPermissionsResult,但从未调用回调。 这是父活动中的代码: ove
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())
}
我还使用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
这破坏了回调机制。您是否在活动中覆盖了
onRequestPermissionsResult
?我不明白您的最后一个代码块-您是否手动调用dispatchResult()
?你不应该在你的应用程序代码中这样做。您好,不,我在调试时添加了这些作为检查。因为调用dispatchResult()
如果调用已注册,则返回true。因此,这段代码仅用于调试目的。我不会在活动中调用onRequestPermissionsResult。我添加它只是为了调试,看看是否会执行回调。
override fun getLifecycle(): LifecycleRegistry