错误:类型不匹配:推断类型为单位,但应为布尔值

Posted

技术标签:

【中文标题】错误:类型不匹配:推断类型为单位,但应为布尔值【英文标题】:error: Type mismatch: inferred type is Unit but Boolean was expected 【发布时间】:2021-03-01 21:39:33 【问题描述】:

我在导航抽屉中有错误。我在片段 (center_fragment) 上的抽屉不工作!!

  navigationView.setNavigationItemSelectedListener 
            drawerLayout.closeDrawers()

            when (it.itemId) 

                R.id.contact -> findNavController().navigate(
                    centerFragmentDirections.actionCenterFragmentToContactFragment()

                )

                R.id.about_us -> findNavController().navigate(
                    centerFragmentDirections.actionCenterFragmentToAboutFragment()

                )


                else -> true
            

【问题讨论】:

实际的错误信息在哪一行?它发生在哪里。 【参考方案1】:

setNavigationItemSelectedListener 期望您返回一个布尔值,但您没有在 2 个 when 分支中返回布尔值:

        navView.setNavigationItemSelectedListener 
            when (it.itemId) 
                R.id.contact -> 
                    findNavController().navigate(centerFragmentDirections.actionCenterFragmentToContactFragment())
                    return@setNavigationItemSelectedListener true
                
                R.id.about_us -> 
                    findNavController().navigate(centerFragmentDirections.actionCenterFragmentToAboutFragment())
                    return@setNavigationItemSelectedListener true
                
                else -> true
            
        

【讨论】:

以上是关于错误:类型不匹配:推断类型为单位,但应为布尔值的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin - 类型不匹配:推断类型是 Any?但布尔值是预期的

获取类型不匹配:推断类型为 List 但应为 Collection

Android Kotlin - viewBinding 类型不匹配:推断类型为 DrawerLayout 但应为 ConstraintLayout

两个布尔值的打字稿元组被推断为布尔类型的数组

ByRef 参数类型与布尔值不匹配

类型不匹配。必需:布尔值,在 Scala 中找到:Future[Boolean]