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 的用法,是不是非常简单呢?


相关文章
|
23天前
|
存储 设计模式 数据库
构建高效的安卓应用:探究Android Jetpack架构组件
【4月更文挑战第20天】 在移动开发的世界中,构建一个既高效又可维护的安卓应用是每个开发者追求的目标。随着Android Jetpack的推出,Google为开发者提供了一套高质量的库、工具和指南,以简化应用程序开发流程。本文将深入探讨Jetpack的核心组件之一——架构组件,并展示如何将其应用于实际项目中,以提升应用的响应性和稳定性。我们将通过分析这些组件的设计原则,以及它们如何协同工作,来揭示它们对于构建现代化安卓应用的重要性。
|
6天前
|
Java Android开发 Kotlin
Android Dialog 弹出时,隐藏 navigation bar
Android Dialog 弹出时,隐藏 navigation bar
13 1
|
12天前
|
安全 Android开发 开发者
构建高效Android应用:采用Kotlin与Jetpack的实践指南
【4月更文挑战第30天】 在移动开发领域,随着技术的不断进步,为了提高应用的性能和用户体验,开发者们不断地探索新的工具和框架。对于Android平台而言,Kotlin语言以其简洁性和功能性成为了开发的首选。而Jetpack组件则提供了一套高质量的库、工具和指南,帮助开发者更轻松地构建高质量的应用程序。本文将探讨如何结合Kotlin语言和Jetpack组件来优化Android应用的开发流程,提升应用性能,并保证代码的可维护性和可扩展性。
|
13天前
|
数据库 Android开发 开发者
构建高效Android应用:采用Kotlin与Jetpack的实践指南
【4月更文挑战第30天】 随着移动开发技术的不断演进,Android平台提供了多种工具和框架以提升应用性能和开发效率。在本文中,我们将深入探讨如何结合Kotlin语言的简洁性和Android Jetpack组件的强大功能来构建一个既高效又可维护的Android应用。通过分析现代Android应用架构的关键要素,我们将展示如何利用Kotlin的特性以及如何整合Jetpack中的LiveData、ViewModel和Room等组件,以实现响应式编程、数据持久化和生命周期管理。
|
14天前
|
存储 数据库 Android开发
构建高效Android应用:采用Kotlin与Jetpack的实践指南
【4月更文挑战第29天】 在现代移动开发领域,构建一个既高效又稳定的Android应用对于开发者来说是一个持续的挑战。随着技术的不断进步和用户需求的日益增长,传统的开发方法已不足以满足市场的要求。本文将深入探讨如何结合Kotlin编程语言以及Android Jetpack组件,来提升Android应用的性能、稳定性及开发效率。通过分析Kotlin的优势、介绍Jetpack的核心组件,并结合实际案例,我们将展示如何在实际项目中应用这些技术,以期达到优化应用架构、提高代码质量和加快开发流程的目的。
21 1
|
22天前
|
设计模式 前端开发 数据库
构建高效Android应用:使用Jetpack架构组件实现MVVM模式
【4月更文挑战第21天】 在移动开发领域,构建一个既健壮又易于维护的Android应用是每个开发者的目标。随着项目复杂度的增加,传统的MVP或MVC架构往往难以应对快速变化的市场需求和复杂的业务逻辑。本文将探讨如何利用Android Jetpack中的架构组件来实施MVVM(Model-View-ViewModel)设计模式,旨在提供一个更加模块化、可测试且易于管理的代码结构。通过具体案例分析,我们将展示如何使用LiveData, ViewModel, 和Repository来实现界面与业务逻辑的分离,以及如何利用Room数据库进行持久化存储。最终,你将获得一个响应迅速、可扩展且符合现代软件工
25 0
|
26天前
|
Android开发 开发者
什么是Android Jetpack,它包括哪些组件?
【4月更文挑战第17天】Android Jetpack是Google提供的一套工具集,助力开发者高效、稳定地开发Android应用。它包含架构、UI、行为和基础组件,简化了后台任务、导航和生命周期管理,使开发者能专注于创新。随着不断更新,如CameraX的推出,掌握Jetpack对开发者面试和工作至关重要。
22 0
|
29天前
|
存储 数据库 Android开发
使用Android Jetpack组件加速开发流程
【4月更文挑战第14天】Android Jetpack是为提升开发速度和代码质量而生的组件集合,包括`ViewModel`、`LiveData`、`RecyclerView`、`Room`、`WorkManager`等,它们遵循最新设计原则和最佳实践。例如,`RecyclerView`优化列表显示,`Room`简化数据库操作,`WorkManager`处理后台任务,`ViewModel`和`LiveData`分离业务和UI逻辑。此外,`Navigation`和`Paging`分别优化用户导航和数据加载。通过这些组件,开发者能更高效地构建高性能应用,值得学习和使用。
|
1月前
|
存储 数据库 Android开发
构建高效安卓应用:采用Jetpack架构组件优化用户体验
【4月更文挑战第12天】 在当今快速发展的数字时代,Android 应用程序的流畅性与响应速度对用户满意度至关重要。为提高应用性能并降低维护成本,开发者需寻求先进的技术解决方案。本文将探讨如何利用 Android Jetpack 中的架构组件 — 如 LiveData、ViewModel 和 Room — 来构建高质量的安卓应用。通过具体实施案例分析,我们将展示这些组件如何协同工作以实现数据持久化、界面与逻辑分离,以及确保数据的即时更新,从而优化用户体验并提升应用的可维护性和可测试性。
|
1月前
|
XML 移动开发 Android开发
构建高效安卓应用:采用Jetpack Compose实现动态UI
【4月更文挑战第10天】 在现代移动开发中,用户界面的流畅性和响应性对于应用的成功至关重要。随着技术的不断进步,安卓开发者寻求更加高效和简洁的方式来构建动态且吸引人的UI。本文将深入探讨Jetpack Compose这一革新性技术,它通过声明式编程模型简化了UI构建过程,并提升了性能与跨平台开发的可行性。我们将从基本概念出发,逐步解析如何利用Jetpack Compose来创建具有数据动态绑定能力的安卓应用,同时确保应用的高性能和良好用户体验。
19 0