繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM