最新BottomNavigationView实现 解决setOnNavigationItemReselectedListener废弃问题
从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
相关产品推荐
相关产品推荐

