【问题标题】: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 消费本次点击,防止其他人点击 正在执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多