如何替换BottomNavigationView已废弃的OnNavigationItemSelectedListener?
1. 废弃API的替换方案
setOnNavigationItemSelectedListener在Material Components 1.4.0及以上版本被正式废弃,官方统一了导航类组件的API,推荐替换为setOnItemSelectedListener。如果需要监听导航条目被重复选中的事件,可搭配新增的setOnItemReselectedListener使用。
Kotlin下的使用示例如下:
bottomNavigationView.setOnItemSelectedListener { menuItem -> when (menuItem.itemId) { R.id.nav_home -> { // 处理首页跳转逻辑 true } R.id.nav_profile -> { // 处理个人页跳转逻辑 true } else -> false } } // 可选:监听条目重复选中事件 bottomNavigationView.setOnItemReselectedListener { menuItem -> // 比如已经在首页时点击首页tab,执行回到顶部等操作 }
Android Studio中直接将光标移到废弃方法上,按Alt + Enter即可选择一键自动替换为新API。
2. 类似废弃API的通用处理方式
- 优先查看IDE提示:将鼠标悬停在标记为删除线的废弃方法上,Android Studio会直接展示官方给出的替换方案,绝大多数场景可以通过快捷键一键完成替换
- 查看源码注解:废弃方法的
@Deprecated注解中会明确标注废弃原因、推荐的替换API,部分Kotlin兼容的API还会带有@ReplaceWith字段,直接给出自动替换的代码模板 - 查阅对应库的更新日志:如果是第三方依赖库的废弃API,可查看对应库的版本Release Notes,确认功能调整的范围和适配方案
3. 忽略警告直接上线的风险
废弃API不会在当前依赖版本直接移除,短时间内运行不会有明显问题,但长期使用存在以下明确隐患:
- 编译失败风险:后续升级Material Components、Android compileSdk等版本时,官方会彻底删除废弃足够久的API,直接导致项目编译报错,无法正常打包
- 稳定性隐患:废弃API不会再收到官方的bug修复、安全补丁更新,可能存在已知的性能问题、安全漏洞,在新系统版本、特殊机型上容易出现随机崩溃、功能异常等问题
- 维护成本提升:后续项目迭代时,维护人员需要额外花费时间处理历史遗留的废弃API,增加代码维护的时间成本
内容的提问来源于stack exchange,提问作者Edwin
相关产品推荐
相关产品推荐

