【问题标题】:Navigation component with bottom navigation带有底部导航的导航组件
【发布时间】:2019-06-16 11:53:59
【问题描述】:

我正在使用导航组件和底部导航

val navController = indNavController(R.id.nav_host_fragment)
bottom_navigation.inflateMenu(R.menu.bottom_navigation_menu)
bottom_navigation.setupWithNavController(navController)

我正面临下一个问题:

当在底部导航中选择一个项目时,会加载一个片段。当我再次按下同一个项目时,问题就来了,然后将加载一个新的片段,这根本没有意义。

示例: 1- 用户选择菜单项 A,然后加载 FragmentA。 2- 用户再次选择菜单项 A,然后将加载一个新的 FragmentA,

我正在尝试使用

bottom_navigation.setOnNavigationItemSelectedListener {  }

但是底部导航将无法与 navController 一起使用。

所以问题是:有一种方法可以处理这种情况,以便在用户已经在该屏幕中时再次加载新片段?

【问题讨论】:

    标签: android android-fragments bottomnavigationview


    【解决方案1】:

    最后,我能够解决这个问题。

    正如我之前所说,这段代码:

    bottom_navigation.setupWithNavController(navController)
    

    正在使用

    bottom_navigation.setOnNavigationItemSelectedListener {  }
    

    所以每次我选择/重新选择一个项目时,导航控制器都会加载一个新片段。我检查了setOnNavigationItemSelectedListener() 的javadoc,它说:

    设置侦听器,将在选择底部导航项时通知。这个监听器 * 也会在 当前选择的项目被重新选择,除非 {@link * OnNavigationItemReselectedListener} 也已设置。

    所以我所做的就是在我的代码中添加下一行:

    bottom_navigation.setOnNavigationItemReselectedListener { }
    

    仅此而已。 navController 将在选择项目时加载片段,但在底部导航中重新选择项目时不会加载。

    【讨论】:

    • 谢谢@Ocampo,它节省了我很多时间。
    • 快速简单。谢谢!
    【解决方案2】:

    尝试这样忽略用户对同一选定项目的点击:

    bottom_navigation.apply {
            setOnNavigationItemSelectedListener {
                if (it.itemId == bottom_navigation.selectedItemId) {
                    true
                } else when (it.itemId) { ... }
    

    【讨论】:

    • 嗨!我没有使用列表。当我说项目时,我的意思是底部导航的项目。
    • 这种方法的问题是这条线 bottom_navigation.setupWithNavController(navController) 将不起作用。所以看来唯一的解决办法就是去掉导航组件和底部导航的连接
    【解决方案3】:

    我更喜欢使用来自navController的监听器:

    navController.addOnDestinationChangedListener { 
        controller, destination, arguments -> 
            //destination.id for id fragment        
    }
    

    因此,当目标更改时触发侦听器 - 而不是单击 bottom_navigation。
    因为setOnNavigationItemSelectedListener 在声明setupWithNavController 时已经使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多