Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在片段中使用registerForActivityResult时,永远不会调用回调_Android_Android Fragments_Android Permissions - Fatal编程技术网

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

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

我正在使用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())
    }
我还使用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