Android官方架构组件Navigation:大巧不工的Fragment管理框架

我写了一个Navigation的sample,它最终的效果是这样:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

sample.gif

这是3个简单的Fragment之间跳转的情景,经过 转场动画 的修饰,它们之前的切换非常 流畅 且  自然。在展示的最后,我们可以看到,Fragment2 -> Fragment1的时候,实际上是由 用户 点击手机Back键 触发的。

项目结构图如下,这可以帮你尽快了解sample的结构:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我把这个sample的源码托管在了我的github上,你可以通过 点我查看源码 。

3.尝试使用Navigation

#### Navigation目前仅AndroidStudio 3.2以上版本支持,如果您的版本不足3.2,请点此下载预览版AndroidStudio

首先介绍Navigation的使用:

无论是否认可,我们都必须承认,Google已经在尝试让Kotlin上位,无论是今年IO大会的 数据展示,还是官方文档上的 代码示例片段,亦或是Google最新  开源Demo的源码,使用语言清一色 Kotlin,本文亦然。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

① 在Module下的build.gradle中添加以下依赖:

dependencies {    def nav_version = '1.0.0-alpha01'    implementation "android.arch.navigation:navigation-fragment:$nav_version"    implementation "android.arch.navigation:navigation-ui:$nav_version"}

② 新建三个Fragment:

//3个Fragment,它们除了layout不同,没有其它区别class MainPage1Fragment : Fragment() {    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,                              savedInstanceState: Bundle?): View {        return inflater.inflate(R.layout.fragment_main_page1, container, false)    }}class MainPage2Fragment : Fragment() {    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,                              savedInstanceState: Bundle?): View? {        return inflater.inflate(R.layout.fragment_main_page2, container, false)    }}class MainPage3Fragment : Fragment() {    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,                              savedInstanceState: Bundle?): View? {        return inflater.inflate(R.layout.fragment_main_page3, container, false)    }}

③ 新建导航视图文件(nav_graph)

在res目录下新建navigation文件夹,然后新建一个navigation的resource文件,我叫它 nav_graph_main.xml :

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

打开导航视图文件,我们可以在AndroidStudio 3.2版本上,进行可视化编辑,包括选择新增Fragment,或者拖拽,连接Fragment:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

④ 编辑导航视图文件

我们打开Text标签,进入xml编辑的页面,并这样配置:

<?xml version="1.0" encoding="utf-8"?><navigation xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    app:startDestination="@id/page1Fragment">    <fragment        android:id="@+id/page1Fragment"        android:name="com.qingmei2.samplejetpack.ui.main.MainPage1Fragment"        android:label="fragment_page1&#

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值