美文网首页
Navigation+AppBarLayout+BottomNa

Navigation+AppBarLayout+BottomNa

作者: 全汪汪 | 来源:发表于2019-04-25 15:08 被阅读0次

关于标题

Navigation:用于fragment见的跳转
AppBarLayout:用于构建一个和滑动联动的toolbar
BottomNavigationView:一个底部导航栏,用于切换多个fragment
RecyclerView:列表展示
本标题的含义是:如何处理多个fragment之间顶部toolbar的联动,本示例场景:
fragmentA是一个列表,列表滑动的时候toolbar折叠。
fragmentB和C简单的页面,此页面toolbar显示。
解决的问题:当fragmentA中toolbar折叠后,切到B和C时,toolbar依旧处于折叠状态:


问题描述

而最终我们要达成的效果是这样:


最终实现效果如图
ps:这里的前提是是使用toolbar,而不是自己再xml里写一个头部布局。使用AppBarLayout和toolbar并设置相应的behavior就能达到这种标题栏和滑动的联动效果。

解决办法:

我们需要在管理这些fragment的activity里添加关于BottomNavigationView的监听,通过判断不同的页面id从而来达到不同fragment的效果:

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val navController = Navigation.findNavController(this, R.id.fragment_container)
        NavigationUI.setupWithNavController(nv_bottom, navController)
        //BottomNavigationView的监听
        nv_bottom.setOnNavigationItemSelectedListener {
            if (it.itemId == R.id.navigation_dashboard || it.itemId == R.id.navigation_notifications){
                //展开标题栏,appbar为AppbarLayou的id
                appbar.setExpanded(true)
            }
            return@setOnNavigationItemSelectedListener NavigationUI.onNavDestinationSelected(it, navController)
        }
    }

注意:

在实现BottomNavigationView的监听的时候,如果你也使用了NavigationUI+BottomNavigationView这样的模式来进行跳转,应该注意的是NavigationUI.setupWithNavController()这个方法里本身就已经 实现了BottomNavigationView的监听倒不如说,NavigationUI联动BottomNavigationView的基本原理就是实现了他的监听。所以在我们自己实现BottomNavigationView的监听时,要把NavigationUI.setupWithNavController()的调用放在自己实现的监听的前面,然后再模仿其内部返回调用NavigationUI.onNavDestinationSelected方法的值。

setupWithNavController里已经实现了对BottomNavigation的监听

相关文章

网友评论

      本文标题:Navigation+AppBarLayout+BottomNa

      本文链接:https://www.haomeiwen.com/subject/qufzgqtx.html