Android Jetpack框架中的Navigation的使用(步骤超详细)

谷歌jetpack开源库更新了很多内容,最近比较感兴趣的时候其中新增的Navigation,专门用来实现单Activity多Fragment的方案,以前项目中要自己实现栈来维护,开源的可能就是鼎鼎大名的Fragmentation,可能感觉坑有点多,所以这次想用Navigation来实现练练手,万一以后自己有了这样的需求也不好说!网上搜索了一大堆,但是自己感觉没有哪一个教程很详细,最后很无奈,废话就扯这么多吧!!!!!!

好吧,先上一个效果图吧,看下简单的Navigation实现的具体的效果

Android Jetpack框架中的Navigation的使用(步骤超详细)_第1张图片

如果你想在你的项目里面引用Navigation的话,那么你的Studio必须是3.2以上的版本,在setting里面开启支持Navigation的功能才能使用,如下图Android Jetpack框架中的Navigation的使用(步骤超详细)_第2张图片

然后在你的项目里面引用Navigation的依赖,这样才能正常使用navigation

def nav_version = "1.0.0-alpha06"
implementation "android.arch.navigation:navigation-fragment:$nav_version"
implementation "android.arch.navigation:navigation-ui:$nav_version"

然后在res里面创建navigation路由的xml文件

Android Jetpack框架中的Navigation的使用(步骤超详细)_第3张图片 Android Jetpack框架中的Navigation的使用(步骤超详细)_第4张图片

创建好了以后,咱们可以创建我的Fragment界面,然后在xml里面来编辑我的路由文件

Android Jetpack框架中的Navigation的使用(步骤超详细)_第5张图片

如上图所示,在创建的Navigation的xml文件里面选中Design模式,点击左上角的+号可以导入我们创建好的fragment文件,选中我们导入的fragment文件以后会有小圆点,直接用鼠标拖拽我们想要路由到的界面,这个功能有点像IOS的storyBorad,在xml里面你会看到如果拖拽了线条的话会自动生成一个action的选项,这个里面带一个id,这个id就是我们待会要用来实现fragment路由跳转的id值,好了,回到fragment里面我们看看怎么才能实现路由跳转呢?

穿件homeFragment的时候,需要创建一个fragment来让我导入创建的naviGrap,具体布局的界面的实现实在firstFragment如下图

Android Jetpack框架中的Navigation的使用(步骤超详细)_第6张图片

两个属性要注意,

app:defaultNavHost="true"
app:navGraph="@navigation/navi"

一个是开启默认的navHost效果,navGraph是我们创建的navigation的路由,这样才能导入

 

我由于自己测试,将fragment放在了fragment里面,所以导航的时候可能api用的有点差异

Bundle bundle = new Bundle();
bundle.putInt("id",15);
NavOptions navOptions = new NavOptions.Builder().build();
navOptions.shouldLaunchSingleTop();
Navigation.findNavController(view).navigate(R.id.action_firstFragment_to_secondFragment,bundle);

上面由于实在fragment里面使用,所用用了findnavController(view),这里的view是fragment填充的view,bundle是为了实现fragment之间跳转的时候像intent一样传值,非常的方便,如果实在Activity·里面使用的话,我们可以使用另外的一种形式,如下所示

 Navigation.findNavController(this, R.id.fragment);

这大概就是Navigaton的使用的大体流程,如果不会的同学,我demo会放上地址,可以看看demo的具体

使用,写的可能有点凌乱,但是看了基本上都会写

demo地址:https://github.com/WinWang/navigation

 

你可能感兴趣的:(Navigation)