【问题标题】:How to prevent BottomNavigationView (that is setup with Navigation Component) from changing destinations an item click如何防止 BottomNavigationView(使用导航组件设置)更改目标单击项目
【发布时间】:2021-10-14 23:04:58
【问题描述】:
我有一个带有导航组件的BottomNavigationView 设置,我想拦截在按下项目时更改目的地的处理,并防止它在特定条件下更改目的地。
例如:如果用户正在导航到目的地并且他没有登录,则显示一个对话框。
我该怎么做?
我似乎找不到一个可以称为 OnDestinationChange 并返回某种布尔值以通知导航组件是否应该继续导航的侦听器。
【问题讨论】:
标签:
android
listener
bottomnavigationview
android-architecture-navigation
【解决方案1】:
使用导航组件方法无法做到这一点,但有一个简单的解决方法不会破坏导航流程。
在您的底部导航视图上获取菜单并设置 onItemClickListener 并返回 true 如果您不希望导航组件接收点击因此不会发生导航
这是示例
binding.bottomNav.menu.findItem(R.id.searchFragment)?.setOnMenuItemClickListener {
if(viewModel.isUserAuthorized()) {
false // here this will allow navigation component to consume the click
}
else {
showUnauthorizedUserDialog()
true // here this will prevent navigation component from consuming the click
}
}
另外根据 onMenuItemClick
的文档
@return 返回 true 消费本次点击,防止其他人点击
正在执行。