Android Navigation 架构组件入门教程
Android Navigation 架构组件入门教程
版权声明:本文为博主原创文章,未经博主允许不得转载。
前言
Navigation组件是AndroidStudio3.2版本更新带来的新组件,其特点是在一个Activity中使用多个Fragment处理平滑用户操作,且可以统一进场,退场,弹出,隐藏动画,可视化处理Action,支持深层链接(不在同一个Activity时可以弹出跳转,底层是BroadcastReceiver),支持以少量代码连接底部导航或者连接ActionBar菜单或者连接Drawlayout的MenuItem,且导航时提供了类型安全(SafeArgs)。好处说了那么多,下面咱们来看看具体如何使用吧!
教程下载
你需要知道
关于Navigation你需要知道如下三个组件
Navigation graph
这是Navigation的导航图,位于res/navigation/
目录下的xml文件,
其有两个模式,Design
(可视化设计模式)和Text
(文字模式),在Design
可视化环境下可以对整个Navigation
做新建等操作,在Text
模式下可进行代码声明,如下所示:
<fragment
android:id="@+id/home_dest"
android:name="com.example.android.codelabs.navigation.HomeFragment"
android:label="@string/home"
tools:layout="@layout/home_fragment">
<action
android:id="@+id/next_action"
app:destination="@+id/flow_step_one_dest"
app:enterAnim="@anim/slide_in_right"
app:exitAnim="@anim/slide_out_left"
app:popEnterAnim="@anim/slide_in_left"
app:popExitAnim="@anim/slide_out_right" />
</fragment>
NavHostFragment
每个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
做关联
NavController
NavController是一个跟踪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设备以上
引用
Android Navigation 架构组件入门教程的更多相关文章
- highcharts图表组件入门教程:如何监听柱状图柱子点击事件动态更新当前数据点数值和所对应X轴刻度
highcharts图表组件入门教程:如何监听柱状图柱子点击事件动态更新当前数据点数值和所对应X轴刻度 作者:highcharts | 时间:2014-6-11 14:07:05 | [小 大] | ...
- Android Studio JNI开发入门教程
Android Studio JNI开发入门教程 2016-08-29 14:38 3269人阅读 评论(0) 收藏 举报 分类: JNI(3) 目录(?)[+] 概述 在Andorid ...
- 改造 Android 官方架构组件 ViewModel
前言 Android 官方架构组件在今年 5 月份 Google I/O 大会上被公布, 直到 11 月份一直都是测试版, 由于工作比较繁忙, 期间我只是看过类似的文章, 但没有在实际项目中使用过, ...
- Android官方架构组件指南
此指南适用于那些曾经或现在进行Android应用的基础开发,并希望了解和学习编写Android程序的最佳实践和架构.通过学习来构建强大的生产级别的应用. 注意:此指南默认你对Android开发有比较深 ...
- Android官方架构组件介绍之LifeCycle(一)
Android官方架构组件介绍之LifeCycle 下面是官方提供的Android App开发的架构图: 从上图可以看到一些关键字:ViewModel,LiveData,Room等.其实看了上面视频的 ...
- Android官方架构组件介绍之LifeCycle
Google 2017 I/O开发者大会于近日召开,在开发者大会上谷歌除了发布了Android O等一些新产品之外,也对Android代码的架构做出了一个官方的回应. Google 2017 I/O开 ...
- (译)cocos2d-x跨android&ios平台开发入门教程
免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...
- Android Jetpack 架构组件最佳实践之“网抑云”APP
背景 近几年,Android 相关的新技术层出不穷.往往这个技术还没学完,下一个新技术又出来了.很多人都是一脸黑人问号? 不少开发者甚至开始哀嚎:"求求你们别再创造新技术了,我们学不动了!& ...
- Android压力测试快速入门教程(图解)——Monkey工具
文章目录: 一.Monkey简介 二.Monkey的基本用法 三.Monkey测试示例图解 四.Monkey命令参数介绍 五.Monkey log分析 一.Monkey简介 Monkey:Androi ...
随机推荐
- 关于Eclipse导入项目jsp出现红色叉的解决办法
简单图解概括 右击项目 到这里就ok 如果没解决就检查下以下三个地方的版本是否一致 如果还不行,有什么疑问可以留言,我会及时帮助解决的
- [leetcode268]Missing Number
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...
- Windows服务器开发和Linux服务器软件开发的区别
大型网页游戏服务器开发(Windows+Linux) 进程监听 负载均衡 数据库分发 MapGIS IGServer(Java C++)
- artTemplate使用
bower install artTemplate --save https://github.com/aui/artTemplate 快速上手 模板定义: <div id="co ...
- Servlet中的jsp内置对象
Servlet和jsp本质相同,那么为什么还要使用jsp呢,原来的servlet又有什么不好的呢. Servlet和jsp可以做完全相同的事情,就要借助jsp的内置对象们,比如request,resp ...
- C++面试基础之回调
回调函数技术广泛运用在动态库开发(或者类库)中,是使软件模块化的重要手段.回调函数可以看作是一种通知和实现机制,用于控制反转,即模块A调用模块B时,模块B完成一定任务后反过头来调用模块A.在被调用方代 ...
- Android开发 - 掌握ConstraintLayout(十)按比例设置视图大小
有时候在布局界面的时候,UI要求某个View或者某张图片按比例显示,以适应不同的屏幕分辨率. 通常我们时通过自定义View或者引入第三方的库来解决.现在我们既然已经使用了ConstraintLayou ...
- 【洛谷3865】 【模板】ST表(猫树)
传送门 洛谷 Solution 实测跑的比ST表快!!! 这个东西也是\(O(1)\)的,不会可以看我上一篇Blog 代码实现 代码戳这里
- 对js中闭包,作用域,原型的理解
前几天,和朋友聊天,聊到一些js的基础的时候,有一种‘好像知道,好像又不不知道怎么讲的感觉’...于是捡起书,自己理一理,欢迎拍砖. 闭包 理解闭包首先要理解,js垃圾回收机制,也就是当一个函数被执行 ...
- Python学习笔记【第十二篇】:Python异常处理
什么是异常 异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下 错误类型分为两种:语法错误和业务逻辑错. 异常的类型 AttributeError 试图访问一个对象没有的树形,比如 ...