转载请注明出处 [https://www.jianshu.com/p/b8307429e905 ] 上一篇文章我们介绍了谷歌官方组件Navigation的使用谷歌官方组件Navigation你了解了吗?...导航图是包括所有的目标视图和操作的一个资源文件,这个导航图标代表了我们应用的所有的导航路径图。...如果我们是第一次创建导航图,Android Studio会在res文件夹下面创建一个navigation 的资源文件目录,这个目录当中就包含了我们刚才创建的资源文件。如图: ?..."> 这里的是导航图的根元素,当我们要在图标当中添加目标视图和连接动作的时候,我们可以使用和元素作为子元素...在activity当中添加NavHost 一个主导航必须由NavHost派生而来,导航组件默认通过NavHost来实现,NavHostFragment来处理目标fragment直接的切换。
Navigation 是 JetPack 中的一个组件,用于方便的实现页面的导航,所以抽象出了一个 destination 的概念,大部分情况一个 destination 就表示一个 Fragment,...但是它同样可以指代 Activity、其它的导航图。...多个 destination 连接起来就组成了一个导航图,类似于一种栈结构,页面先进先出。destination 之间的连接叫做 action。 概念略抽象,下面看具体的应用。...navigate 方法执行跳转,navigate 的参数可以是一个 destination(这里就是 fragment 在导航图 nav_graph 中的 id),也可以是 action 的 id。...Architecture Component Adding Components to your Project Android Navigation Architecture Component 使用详解
这次的Android Jetpack推出了五个新组件,它们分别是:Navigation(导航组件)、Paging(分页组件)、WorkManager(处理类似后台任务组件)、Slices(切片)、Android...Deeplink的支持,绕过activity直接跳到fragment 传递参数更安全 >>>> Navigation——导航组件 a、基于Android Studio 3.2 Canary 14(https...().getString("amount")); 2、以类型安全的方式在目标之间传递数据 导航架构组件有一个名为safeargs的Gradle插件,它生成简单的对象和构建器类,以便对目标和动作指定的参数进行类型安全访问...安全参数建立在Bundle方法的基础上,但需要一些额外的代码来换取更多的类型安全。如果您使用Gradle,则可以使用安全参数插件。...>>>> 结语 至此Navigation的用法和源码结构都介绍分析完了,他的功能还是很强大的,并且有着安全性和灵活性,以及可视化、人性化的操作,deeplink跳转,同时还支持所有架构组件例如Lifecycle
而通过Jetpack的导航组件——Navigation,就可以很方便的管理各fragment之间的切换,让开发变得更简单。...组成三要素 Navigation graph 一个包含所有导航相关信息的 XML 资源 NavHostFragment 一种特殊的Fragment,用于承载导航内容的容器 NavController 管理应用导航的对象...右键该目录,点击New -> Navigation Resource File,输入需要新建的资源文件名,这里命名nav_graph,点击ok,一个nav_graph.xml就创建好了。...,首先得到navController对象,然后调用它的navigate方法,传入前面nav_graph中定义的action的id即可。...在系统弹出的窗口中,选择使用我们的应用打开,就能跳转到对应的页面了。
Google官方对它的描述: 今天,我们宣布推出Navigation组件,作为构建您的应用内界面的框架,重点是让单 Activity 应用成为首选架构。...利用Navigation组件对 Fragment 的原生支持,您可以获得架构组件的所有好处(例如生命周期和 ViewModel),同时让此组件为您处理 FragmentTransaction 的复杂性。...此外,Navigation组件还可以让您声明我们为您处理的转场。...它可以自动构建正确的“向上”和“返回”行为,包含对深层链接的完整支持,并提供了帮助程序,用于将导航关联到合适的 UI 小部件,例如抽屉式导航栏和底部导航。..." /> 3.使用NavController进行页面导航。
一.Navigation的诞生 单个Activity嵌套多个Fragment的UI架构模式,已经被大多数的Android工程师所接受和采用。但是,对Fragment的管理一直是一件比较麻烦的事情。...三.如何使用Navigation 使用Navigation组件前,先要添加以下依赖: implementation "androidx.navigation:navigation-fragment...Fragment退出 app:navGraph="@navigation/nav_graph"/> //用于设置该容器对应的导航图 此时...5.使用NavController完成导航 经过以上的步骤后,我们还需要通过NavController对象,在代码中完成具体的页面跳转工作,我们需要在MainFragment的布局文件中添加一个...既然Navigation和App bar都需要处理页面切换事件,那么为了方便管理,Jetpack引入了NavigationUI组件,使App bar中的按钮和菜单能够与导航图中的页面关联起来。
点击底部可以切换页面,有了上一篇的基础,先新建一个nav_graph的导航资源文件,包含三个framgent子节点 其中fragment节点在上面已经介绍过了,这篇不再讲解,BottomNavigationView是谷歌的一个实现底部导航的组件...我们知道replace方法每次都会重新创建fragment,所以使用Navigation创建的底部导航页面,每次点击切换页面当前fragment都会重建。...那么我们是不能在布局文件中通过app:navGraph属性指定自定义的导航资源文件了,只能在布局文件中去掉app:navGraph这个属性,然后在添加FixFragmentNavigator的同时,通过代码将导航资源文件设置进去...方法,进行页面切换 mNavController通过调用setGraph()方法,传入导航资源文件,并进行解析,获取导航资源文件中的节点,得到NavDestination FragmentNavigator
从 Robolectric 4.0 开始,它们也可用于本地 JVM 测试。 考虑以下使用情形,我们启动登录页面,输入正确的用户名和密码,并确保进入主屏幕。...我们使用新的 Intents.getIntents() Espresso API 来返回捕获的意图列表。...这个测试可以在使用 Robolectric 或任何真实或虚拟设备的本地 JVM 上运行。...要使用 Robolectric 模拟器在本地 JVM 上运行测试用例,请将测试用例放在 “test” 资源根目录中,将以下代码添加到 gradle.build: testImplementation(“...我们非常高兴有机会为开发人员提供有关其应用程序质量的快速、准确和可操作的反馈。 最后,我们很高兴的宣布所有的 AndroidX 组件是完全 开源 的,我们期待着你的贡献。
1 在JetPack中有一个组件是Navigation,顾名思义它是一个页面导航组件,相对于其他的第三方导航,不同的是它是专门为Fragment的页面管理所设计的。...它对于单个Activity的App来说非常有用,因为以一个Activity为架构的App页面的呈现都是通过不同的Fragment来展示的。所以对于Fragment的管理至关重要。...通常的实现都要自己维护Fragment之间的栈关系,同时要对Fragment的Transaction操作非常熟悉。为了降低使用与维护成本,所以就有了今天的主角Navigation。...如果你对JetPack的其它组件感兴趣,推荐你阅读我之前的系列文章,本篇文章目前为JetPack系列的最后一篇。...它有一个属性startDestination用来定义导航栈的根入口fragment fragment: 顾名思义fragment页面。
的使用 关于代码 1 关于Robolectric3.0 作为一个软件开发攻城狮,无论你多不屑多排斥单元测试,它都是一种非常好的开发方式,且不谈TDD,为自己写的代码负责,测试自己写的代码,在自己力所能及的范围内提高产品的质量...本文对Robolectric3.0做了简单介绍,并列举了如何对Android的组件和常见功能进行测试的示例。 2 环境搭建 Gradle配置 在build.gradle中配置如下依赖关系: ?...4.UI组件状态 ? 5.Dialog ? 6.Toast ? 7.Fragment的测试 如果使用support的Fragment,需添加以下依赖 ?...8.访问资源文件 ? 4 BroadcastReceiver的测试 首先看下广播接收者的代码 ?...以上代码的单元测试用例: ? 6 Shadow的使用 Shadow是Robolectric的立足之本,如其名,作为影子,一定是变幻莫测,时有时无,且依存于本尊。
虽然ASP也已经不更新了,但是中国早期开发的网站都是用ASP开发的,所以相对VFP来说,ASP的资源和教程是很多的,这些资源大部分是可以被VFP所用的。...fname.Close set fname=nothing set fs=nothing %> 那么在VFPBS中怎么使用呢?非常简单!...fname.Close() Endproc Enddefine 是不是非常简单,像图片加水印,广告组件什么的,都可以使用ASP的相应组件。...OpenTextFile 打开文件,并返回一个用于访问此文件的 TextStream 对象。 FileSystemObject 组件的更多用法可以百度哦。...我会找些好用的ASP组件,让大家的BS之旅更加舒适。 写在最后面的话 加菲猫的VFP公众号接受投稿,一经采用,即有稿费,稿费暂定50元一篇。
根据我们曾经做的调查,开发者们希望 Android 官方可以维护一些实用的组件库和架构实践,以降低中大型应用的开发门槛,这样开发团队就可以集中更多精力在实际业务的优化和改进上。...其中 androidx.* 库与 Framework API 解耦,这能够提供向后兼容的同时,也能更频繁地更新。 Android Jetpack 中的架构组件可帮助您设计稳健、可测试且易维护的应用。...这里我们分上下两篇介绍架构组件的最新更新,如果您还没有阅读本文的上篇,请点击这里查看《Android 架构组件的最新进展 (上篇) 》。...而且它和架构组件中的其他部分或者其他技术都能配合使用,比如 Room, Realm, Retrofit 等等。...感谢大家对本次连载的关注,希望在了解完架构组件的最新进展后,大家能在其中找到适合自己应用的功能。您也可以观看 ☟下面的视频☟ 重温我们对架构组件进展的介绍。
Run Tool Window 如果你想测试部分引用了Android特殊的类和资源的代码的话,那么普通的单元测试则不能使用。...Robolectric 我们可以使用Robolectric来编写使用Android SDK和资源的测试。而这些测试任务会跑在一个JVM中。...这也就意味着它不需要在设备或者虚拟机上使用Android资源了。因此,这样也会对于APP或者Library的UI组件表现的测试会更加快速。...不同的是,我们写的测试单元可以使用Android的类和资源。...Functional tests 功能测试用来测试App中的一些组件是否与预期一样进行工作的。
缺点: (1)和业务耦合太大,业务app在打包时需要裁掉测试代码和资源,和mainfest.xml中的测试元素。...考虑的是:Robolectric。...[1506067699217_6372_1506067901963.png] Robolectric样例代码: [1506067707496_708_1506067910309.png] 综上:...1、从Robolectric样例代码可以看出,目前Robolectric 基本是 从UI层介入,理论上可以忽略UI层,测试单一组件的逻辑,但关键的是不能测试组件的集成逻辑。...因此,最终放弃了Robolectric,选择了Local Unit Tests和Instrumented Tests。 未完待续......
了解Navigation使用后,思考几个问题 NavHostFragmnet作为路由容器,是如何解析nav_graph资源文件,从而生成NavGraph对象? 跳转时,路由是如何被执行的?...通过1.处解析,得到nav_graph资源id,并保存在mGraphId变量;3.处解析获取 app:defaultNavHost="true"设置的参数。...首先我们知道NavGraph中是包含nav_graph所有节点的内容。...mBackStack,如果回退栈为空,那么mGraph一定是第一个添加的元素 把新的目标NavDestination也加入进回退栈 经过这里,导航具有了返回栈的能力。...支持Deeplink 可视化编辑页面 回退栈管理 Android组件(如:BottomNavigationView)完美交互,JetPack其他组件联合使用 缺点: 所有节点定义在nav_graph.xml
,是很多其它测试框架的基础,可以在同进程中加载被测组件。...优点: 容易在最短的时间内编写测试脚本,易用性高。 自动跟随当前activity。 由于运行时绑定到GUI组件,所以相比Appium,它的测试执行更快,更强大。...Robolectric http://robolectric.org/ Robolectric 是一款Android单元测试框架,但它并不依赖于Android提供的测试功能,它通过实现一套JVM能运行的...Pivotal实验室声称使用Robolectric可以在28秒内运行1047个测试。...XCTest的优点是与Xcode深度集成,有专门的Test导航栏,但因为受限于官方测试API,因此功能不是很丰富。 2.
二、Google官方MVP架构 在熟悉单元测试框架前,首先需要学习了下Google官方推荐Android的MVP项目架构,好的框架单元测试也比较好开展。...其推荐的项目中MVP各层所使用的单元测试框架如下图所示: 其MVP测试架构图总结如下: 项目代码有兴趣学习的同学可以去自行下载去学习,学习这种优秀代码是最快的方式。...compileSdkVersion 23的不能使用Robolectric:3.0的版本,只能使用Robolectric:3.2.2以上的。...Robolectric运行报TinkerRuntimeException: Tinker Exception:onCreate method not found 业务使用了Tinker多包加载架构,运行出现上面的异常...在我们的项目中,单元测试对象建议和类相对应,这样的单元测试结果比较直观。单元测试分析被测类的业务逻辑,这里的逻辑不仅仅包括界面元素的展示以及控件组件的行为,还包括代码的处理逻辑。
参考: Android单元测试(四):Robolectric框架的使用 官网 ---- 通过实现一套 JVM 能够运行的 Android 代码,从而实现脱离 Android 环境进行测试。...基类上的配置子类都会继承,所以如果有很多类都需要同样的配置,可以创建父类使用。...robolectric.dependency.dir — robolectric.offline 时,配置运行时依赖文件所在的文件夹路径。...,有些使用默认值。...已经内置了很多的 ShadowXXX 类,如果要使用自定义的,需要配置 @Config(shadows={MyShadowBitmap.class, MyOtherCustomShadow.class
填写File name比如:nav_graph Resource type选择Navigation 点击OK 然后会在res下生成一个navigation的目录,里面有我们刚才创建的nav_graph.xml...app:navGraph="@navigation/nav_graph"将NavHostFragment跟我们刚才创建的navigation关联。...然后重新打开nav_graph.xml会发现在HOST下面就会显示我们关联的activity: 添加导航连接 左键按住fragment右侧中间的圆圈然后拖动到要导航的fragment然后松手 切换到...tools:layout="@layout/fragment_b" /> action添加了一个id和destination,destination就是我们要导航到的...深层链接 deep-link 使用 deep-link可以创建深层链接,类似activity的自定义URL使用Scheme方式来跳转,可以直接跳转到指定Fragment <?
navigationUp和popBackStack()回退上一级时有什么区别,该如何正确使用 跳转时 有时用的是Action的ID,有时用的是Fragment的ID 他俩到底在什么场景下,区分该将哪个传入方法作为参数...使用和核心方法 1.创建NavGraph 图片.png ==navigation== :视图导航的根部标签...name 节点对应的Fragment全类名 label 节点说明,当与BottomNavigationView组合使用时,字符串内容会成为页面的title tools:layout...,进入Navigation,视图导航编辑页面。
领取专属 10元无门槛券
手把手带您无忧上云