Android JetPack 之 Navigation

简介: Android JetPack 之 Navigation

Navigation 可以更加方便的使用 Fragment,使用过程非常简单,下面看一下使用方法


1,导入依赖


implementation 'android.arch.navigation:navigation-fragment:1.0.0'
    implementation 'android.arch.navigation:navigation-ui:1.0.0'
    androidTestImplementation 'android.arch.navigation:navigation-testing:1.0.0-alpha08'


2,在Res 目录下 创建 navigation 文件夹,然后创建 nav_graph.xml


0a2653c851af460fa595bd959398a8f1.png


3,在这个xml 文件中 选择自己的 fragment


2d65d23f6d4748949b924e4057485923.png


需要指定从那个 fragment 开始的话就直接 选中某个视图 然后右击 点击 Set as Start Destination 这个项目就可以将这个设置为 最开始的fragment,然后通过连线的方式确定他启动的是哪一个fragment


4,在 Activity 中引用


有两种方式进行引用,修改 Activity 的布局如下所示:


<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat 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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".mvp.base.BaseActivity">
    <!-- name 是NavHostFragment,他实现了NavHost,这是一个用于放置管理的 destination 的空视图 -->
    <!-- defaultNavHost 表示NavHostFragment 可以拦截处理返回键  -->
    <!-- navGraph 用于将这个 NavHostFragment 和 nav_graph.xml 关联起来 -->
    <fragment
        android:id="@+id/nav_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/nav_graph"/>
</androidx.appcompat.widget.LinearLayoutCompat>


通过上面这种方式就可以 显示第一个fragment 了。


还有一种方式,如下:


<androidx.appcompat.widget.LinearLayoutCompat 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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".mvp.base.BaseActivity">
    <FrameLayout
        android:id="@+id/frame_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</androidx.appcompat.widget.LinearLayoutCompat>


还需要在代码中进行如下修改:


//找到xml 文件
        NavHostFragment navHost = NavHostFragment.create(R.navigation.nav_graph);
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.frame_layout,navHost)
                // 相等于 xml 中的 app:defaultNavHost="true"
                .setPrimaryNavigationFragment(navHost)
                .commit();


即可完成加载


5,碎片之间的跳转 和 回退栈


在 nav_graph.xml 中将 fragment 连接好以后 就可以使用 Navigation 自带的方法进行跳转了,并且在跳转的使用可以在nav_graph.xml 中设置跳转的动画。fragment 直接跳转的方法 如下 :


// id 为nav_graph.xml 中 fragment 内 action 的id ,就是需要跳转掉指定fragment的 id
fragment基本跳转  A->B
Navigation.findNavController(rootView).navigate(id);
fragment 携带数据跳转-Bundle   A->B
Navigation.findNavController(rootView).navigate(id, bundle);


跳转方法,多级跳转     A->B->C,C->A,避免Navigation 跳转后重新执行生命周期方法

注意:这里的id 为 需要回退到指定fragment的 id,并非action,不需要再 xml 中进行连线。

第二个参数 为false 表示 退栈不包括指定的id,否则会将 id 的那个fragment 也退掉

avigation.findNavController(rootView).popBackStack(id, false); //如果退栈一次就返回 true


退栈方法

Navigation.findNavController(rootView).navigateUp();


6,生命周期


通过 Navigation 进行跳转后,原来 fragment 的生命周期会走到那一步呢?如下:


A —> B


从 A 到 B ,则A的生命周期执行到 onDestroyView() ,这个方法的作用就是销毁 fragment 的有关视图 但是依然可以通过 onCreateView() 方法进行重写创建视图。


在跳到 B 后,如果点击了 返回,则 A 就会通过 onCreateView() 重新创建视图。这时 B 就会 执行 onDestory()。


有关视图 但是依然可以通过 onCreateView() 方法进行重写创建视图。


在跳到 B 后,如果点击了 返回,则 A 就会通过 onCreateView() 重新创建视图。这时 B 就会 执行 onDestory()。


以上就是 Navigation 的用法,是不是非常简单呢?


相关文章
|
6月前
|
安全 Java Android开发
安卓开发中的新趋势:Kotlin与Jetpack的完美结合
【6月更文挑战第20天】在不断进化的移动应用开发领域,Android平台以其开放性和灵活性赢得了全球开发者的青睐。然而,随着技术的迭代,传统Java语言在Android开发中逐渐显露出局限性。Kotlin,一种现代的静态类型编程语言,以其简洁、安全和高效的特性成为了Android开发中的新宠。同时,Jetpack作为一套支持库、工具和指南,旨在帮助开发者更快地打造优秀的Android应用。本文将探讨Kotlin与Jetpack如何共同推动Android开发进入一个新的时代,以及这对开发者意味着什么。
|
2月前
|
测试技术 数据库 Android开发
深入解析Android架构组件——Jetpack的使用与实践
本文旨在探讨谷歌推出的Android架构组件——Jetpack,在现代Android开发中的应用。Jetpack作为一系列库和工具的集合,旨在帮助开发者更轻松地编写出健壮、可维护且性能优异的应用。通过详细解析各个组件如Lifecycle、ViewModel、LiveData等,我们将了解其原理和使用场景,并结合实例展示如何在实际项目中应用这些组件,提升开发效率和应用质量。
52 6
|
3月前
|
编译器 Android开发 开发者
带你了解Android Jetpack库中的依赖注入框架:Hilt
本文介绍了Hilt,这是Google为Android开发的依赖注入框架,基于Dagger构建,旨在简化依赖注入过程。Hilt通过自动化的组件和注解减少了DI的样板代码,提高了应用的可测试性和可维护性。文章详细讲解了Hilt的主要概念、基本用法及原理,帮助开发者更好地理解和应用Hilt。
93 8
|
3月前
|
安全 Java Android开发
探索安卓应用开发的新趋势:Kotlin和Jetpack Compose
在安卓应用开发领域,随着技术的不断进步,新的编程语言和框架层出不穷。Kotlin作为一种现代的编程语言,因其简洁性和高效性正逐渐取代Java成为安卓开发的首选语言。同时,Jetpack Compose作为一个新的UI工具包,提供了一种声明式的UI设计方法,使得界面编写更加直观和灵活。本文将深入探讨Kotlin和Jetpack Compose的特点、优势以及如何结合使用它们来构建现代化的安卓应用。
86 4
|
5月前
|
存储 数据库 Android开发
🔥Android Jetpack全解析!拥抱Google官方库,让你的开发之旅更加顺畅无阻!🚀
【7月更文挑战第28天】在Android开发中追求高效稳定的路径?Android Jetpack作为Google官方库集合,是你的理想选择。它包含多个独立又协同工作的库,覆盖UI到安全性等多个领域,旨在减少样板代码,提高开发效率与应用质量。Jetpack核心组件如LiveData、ViewModel、Room等简化了数据绑定、状态保存及数据库操作。引入Jetpack只需在`build.gradle`中添加依赖。例如,使用Room进行数据库操作变得异常简单,从定义实体到实现CRUD操作,一切尽在掌握之中。拥抱Jetpack,提升开发效率,构建高质量应用!
88 4
|
5月前
|
存储 移动开发 Android开发
使用kotlin Jetpack Compose框架开发安卓app, webview中h5如何访问手机存储上传文件
在Kotlin和Jetpack Compose中,集成WebView以支持HTML5页面访问手机存储及上传音频文件涉及关键步骤:1) 添加`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_STORAGE`权限,考虑Android 11的分区存储;2) 配置WebView允许JavaScript和文件访问,启用`javaScriptEnabled`、`allowFileAccess`等设置;3) HTML5页面使用`<input type="file">`让用户选择文件,利用File API;
|
6月前
|
JavaScript Java Android开发
kotlin安卓在Jetpack Compose 框架下跨组件通讯EventBus
**EventBus** 是一个Android事件总线库,简化组件间通信。要使用它,首先在Gradle中添加依赖`implementation &#39;org.greenrobot:eventbus:3.3.1&#39;`。然后,可选地定义事件类如`MessageEvent`。在活动或Fragment的`onCreate`中注册订阅者,在`onDestroy`中反注册。通过`@Subscribe`注解方法处理事件,如`onMessageEvent`。发送事件使用`EventBus.getDefault().post()`。
|
6月前
|
安全 JavaScript 前端开发
kotlin开发安卓app,JetPack Compose框架,给webview新增一个按钮,点击刷新网页
在Kotlin中开发Android应用,使用Jetpack Compose框架时,可以通过添加一个按钮到TopAppBar来实现WebView页面的刷新功能。按钮位于右上角,点击后调用`webViewState?.reload()`来刷新网页内容。以下是代码摘要:
|
6月前
|
Android开发
Jetpack Compose: Hello Android
Jetpack Compose: Hello Android
|
17天前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
40 19