You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

最新BottomNavigationView实现 解决setOnNavigationItemReselectedListener废弃问题

BottomNavigationView 导航监听最新实现方案

从Material Components 1.4.0版本开始,原有setOnNavigationItemSelectedListener、setOnNavigationItemReselectedListener两个API被正式废弃,官方统一改用通用父类NavigationBarView下的新监听接口实现。

前置依赖配置

首先确保Module级build.gradle中引入了符合版本要求的Material组件依赖,推荐使用稳定版:

implementation 'com.google.android.material:material:1.9.0'

Kotlin实现示例

  • 获取控件实例
val bottomNav = findViewById<BottomNavigationView>(R.id.bottom_nav_view)
  • 设置选中监听(对应原选中切换Fragment/页面逻辑)
bottomNav.setOnItemSelectedListener { item ->
    when (item.itemId) {
        R.id.nav_home -> {
            // 切换到首页逻辑
            true
        }
        R.id.nav_category -> {
            // 切换到分类页逻辑
            true
        }
        R.id.nav_mine -> {
            // 切换到个人中心逻辑
            true
        }
        else -> false
    }
}
  • 设置重选监听(对应重复点击已选中Tab的逻辑,例如回到页面顶部、刷新页面等)
bottomNav.setOnItemReselectedListener { item ->
    when (item.itemId) {
        R.id.nav_home -> {
            // 首页Tab重选逻辑
        }
        // 其余Tab重选逻辑按需添加
    }
}

Java实现示例

BottomNavigationView bottomNav = findViewById(R.id.bottom_nav_view);

// 选中监听
bottomNav.setOnItemSelectedListener(item -> {
    switch (item.getItemId()) {
        case R.id.nav_home:
            // 切换到首页逻辑
            return true;
        case R.id.nav_category:
            // 切换到分类页逻辑
            return true;
        case R.id.nav_mine:
            // 切换到个人中心逻辑
            return true;
    }
    return false;
});

// 重选监听
bottomNav.setOnItemReselectedListener(item -> {
    if (item.getItemId() == R.id.nav_home) {
        // 首页Tab重选逻辑
    }
});

注意:新API的返回值规则和旧API完全一致,setOnItemSelectedListener返回true表示消费本次选中事件,对应Tab会切换为选中状态;返回false则不会切换选中状态。

内容的提问来源于stack exchange,提问作者user16257123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:24:01