Kotlin:setOnNavigationItemSelectedListener 中出现错误“将 lambda 表达式返回类型更改为 Unit”

问题描述 投票:0回答:1

我正在 Kotlin 中开发一个应用程序,并使用 BottomNavigationView 通过 ViewPager 在不同片段之间导航。我正在尝试实现 setOnNavigationItemSelectedListener 方法来在选择导航项时更改 ViewPager 页面。

但是,我遇到错误:“将 lambda 表达式返回类型更改为 Unit”。我不确定为什么会出现这个错误,因为我在网上找到的类似代码示例没有这个问题。这是错误的屏幕截图:

enter image description here

有趣的是,当我使用 setOnNavigationItemReselectedListener 而不是 setOnNavigationItemSelectedListener 时,错误消失,但我需要 setOnNavigationItemSelectedListener 来进行项目选择,而不是重新选择。

问题:

  1. 为什么我在使用 setOnNavigationItemSelectedListener 时收到“将 lambda 表达式返回类型更改为 Unit”错误?

  2. 如何解决此错误并正确实现侦听器?

任何帮助将不胜感激!

android kotlin lambda android-viewpager bottomnavigationview
1个回答
1
投票

在 lambda 中,在

true
语句之后添加
when
这个函数式接口需要你返回一个布尔值。 lambda 的最后一个表达式是返回值。

对于重复性较少的代码,可以考虑修改如下:

bottomNavigationView.setOnNavigationItemSelectedListener {
    val page = when (it.itemId) {
        R.id.navigator_main -> 0
        R.id.navigator_search_food -> 1
        R.id.navigator_list_of_week -> 2
        R.id.navigator_for_students -> 3
        else -> -1
    }
    viewPager.setCurrentItem(page)
    true
}
© www.soinside.com 2019 - 2024. All rights reserved.