首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >片段中未调用registerForActivityResult

片段中未调用registerForActivityResult
EN

Stack Overflow用户
提问于 2021-08-17 07:00:28
回答 1查看 632关注 0票数 3

我最近迁移到了注册请求权限的最新回调机制,但是注册请求回调的最新api从未被触发过。我附上了代码片段,有人能帮我找出哪里出了问题吗?

代码语言:javascript
复制
        @AndroidEntryPoint
class ManageTeamFragment : Fragment(), View.OnClickListener {

    @Inject
    lateinit var manageTeamViewModel: ManageTeamViewModel

    private var requestMultiplePermissions:ActivityResultLauncher<Array<out String>>? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        requestMultiplePermissions =
            registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) {
                println("DEBUG $it")
                if (allPermissionsGranted()) {
                    btnAddUser.showLoading(true)
                    btnAddUser.postDelayed({
                        (activity as? DashboardActivity)?.navToFragment(AddUserFragment(), true)
                    }, 10)
                } else {
                    if (addOrEditUserBottomSheet == null) {
                        addOrEditUserBottomSheet =
                            AddOrEditUserBottomSheet(toolbar.context, addOrEditUserInteractionsListener)
                    }
                    addOrEditUserBottomSheet?.showBottomSheet()
                }
            }

    }


    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {



        return inflater.inflate(R.layout.fragment_manage_team, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        initViews()
        initViewModels()
        // Inflate the layout for this fragment

        btnAddUser.setOnClickListener {
            println("DEBUG requesting")
            requestMultiplePermissions?.launch(REQUIRED_PERMISSIONS)
        }
    }
}

gradle依赖关系

代码语言:javascript
复制
implementation 'androidx.activity:activity-ktx:1.2.0-alpha05'
implementation 'androidx.fragment:fragment-ktx:1.3.0-alpha05'
EN

回答 1

Stack Overflow用户

发布于 2021-08-17 07:48:37

只需像这样请求一个权限即可。

代码语言:javascript
复制
private val requestMultiplePermissions =
        registerForActivityResult(ActivityResultContracts.RequestPermission()) {
            println("DEBUG $it")
            if (allPermissionsGranted()) {
                btnAddUser.showLoading(true)
                btnAddUser.postDelayed({
                    (activity as? DashboardActivity)?.navToFragment(AddUserFragment(), true)
                }, 10)
            } else {
                if (addOrEditUserBottomSheet == null) {
                    addOrEditUserBottomSheet =
                        AddOrEditUserBottomSheet(toolbar.context, addOrEditUserInteractionsListener)
                }
                addOrEditUserBottomSheet?.showBottomSheet()
            }
        }

然后尝试在onCreateView方法中启动请求,并将所需的权限作为字符串传递。

代码语言:javascript
复制
override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

//launch permission request here and pass the permission
requestMultiplePermissions.launch(Manifest.permission.READ_CONTACTS)
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_manage_team, container, false)
    }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68812924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档