Jetpacker
首发于Jetpacker
Navigation(三)NavigationUI的使用

Navigation(三)NavigationUI的使用

Fragment的切换,除了Fragment页面本身的切换,通常还伴有App bar的变化。为了方便统一管理,Navigation组件引入了NavigationUI类。通过这篇文章,我们来看看如何使用NavigationUI 来对App bar和页面切换进行管理。为方便大家学习,文章的最后有Demo演示图和项目地址。

1.App bar的管理

NavigationUI.setupActionBarWithNavController()

NavigationUI提供了该方法,将App barNavController绑定,这样,当NavController为你完成Fragment切换时,系统会自动为你在App bar中完成一些常见操作。比如,当你切换到一个新的Fragment时,系统会自动在App bar的左侧添加返回按钮,响应返回事件等。

NavigationUI对三种类型的App bar提供了支持:

  • Toolbar
  • ActionBar
  • CollapsingToolbarLayout

我们来看NavController具体如何与App bar绑定。以ActionBar为例:

appBarConfiguration = new AppBarConfiguration.Builder(navController.getGraph()).setDrawerLayout(drawerLayout).build();
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);

通过AppBarConfiguration类,我们可以对App bar进行配置

通过NavigationUI.setupActionBarWithNavController()方法,将App bar与NavController绑定

注意:对于CollapsingToolbarLayout/Toolbar也有类似的绑定方法

2.Fragment的管理

常见的Fragment切换通常是通过菜单来完成的,菜单通常有三种形式:

  • App bar左侧的抽屉菜单(DrawLayout + NavigationView)
  • App bar右侧的菜单(menu)
  • 底部菜单(BottomNavigationView)

当我们在导航图中为Fragment页面添加id后,在对应的menu中,也为其指定相同的id,那么,当菜单被点击时,系统会为我们自动切换Fragment。

与此同时,NavController提供了一个名为OnDestinationChangedListener的接口,对Destination切换事件进行监听。

navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener()
{
    @Override
    public void onDestinationChanged(@NonNull NavController controller, @NonNull NavDestination destination, @Nullable Bundle arguments)
    {
        Toast.makeText(DrawerLayoutActivity.this, "onDestinationChanged() called", Toast.LENGTH_SHORT).show();
    }
});

以上便是NavigationUI的核心内容。相关代码量较大,这里不再叙述。我通过项目的方式为大家演示三种形式的菜单页面切换。

下方是项目的演示图和项目代码地址:


michaelye/NavigationUIDemogithub.com图标

发布于 2019-06-18

文章被以下专栏收录