Navigation组件是AndroidStudio3.2版本更新带来的新组件,其特点是在一个Activity中使用多个Fragment处理平滑用户操作,且可以统一进场,退场,弹出,隐藏动画,可视化处理Action,支持深层链接(不在同一个Activity时可以弹出跳转,底层是BroadcastReceiver),支持以少量代码连接底部导航或者连接ActionBar菜单或者连接Drawlayout的MenuItem,且导航时提供了类型安全(SafeArgs)。好处说了那么多,下面咱们来看看具体如何使用吧!
教程下载教程github
你需要知道关于Navigation你需要知道如下三个组件
Navigation graph这是Navigation的导航图,位于res/navigation/目录下的xml文件,
其有两个模式,Design(可视化设计模式)和Text(文字模式),在Design可视化环境下可以对整个Navigation做新建等操作,在Text模式下可进行代码声明,如下所示:
每个Navigation图都有一个起始的Fragment,这个Fragment将作为栈底(压栈,类似Activity的启动栈),其在布局文件中如下声明:
<fragment android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:id="@+id/my_nav_host_fragment" android:name="androidx.navigation.fragment.NavHostFragment" app:navGraph="@navigation/nav_graph" app:defaultNavHost="true" />这里面大家重点关注android:name和app:defaultNavHost="true"是声明启动的Fragment为NavHostFragment
下面的app:navGraph是将此fragment与Navigation graph做关联
NavControllerNavController是一个跟踪Navigation graph当前位置的对象,主要协调NavHostFragment显示对应的Fragment,可通过NavController控制跳转逻辑,安全传参(SafeArgs后面讲解)
SafeArgs使用SafeArgs需要导入Gradle插件(详情看注意事项第4点),在传值类型会自动生成对应类型的class,所以官方推介使用SafeArgs进行传参
实践过程使用AndroidStudio 3.2以上版本
在AndroidStudio 中导入教程下载的实验项目,此过程等待时间长短依据你当前的网络环境
打开app\src\main\res\navigation\nav_graph文件(此文件就是上面提到的Navigation graph)
切换页面内,下面的编辑模式到Design模式,在里面找到一个绿色的+号New Destination,在弹出的窗口内选择SettingFragment,恭喜你目前已经掌握添加一个Fragment到Navigation Edit
接下来咱们切换到MainFragment,在onCreateView中加入NavController navController = NavHostFragment.findNavController(MainFragment.this); navController.navigate(R.id.twoFragment);,这段代码意味着咱们从前面认识到的NavHostFragment中找到NavController,后面通过得到的NavController导航到ID叫R.id.twoFragment的目标
接下来咱们切换到TwoFragment,在onCreateView中加入NavController navController = NavHostFragment.findNavController(TwoFragment.this); navController.navigate(R.id.mainFragment);,这段代码意味着咱们从前面认识到的NavHostFragment中找到NavController,后面通过得到的NavController导航到ID叫R.id.mainFragment的目标
运行项目
至此你已经初步掌握了Navigation的入门用法!
注意事项运行环境必须是Android Studio3.2以上
最低运行在API14设备以上
引用Navigation文档