Android Jetpack 导航组件Navigation使用入门

一、简介

导航组件Navigation用于实现应用中的导航操作。。。(感觉说了一句废话)

Navigation由三个关键部分组成:导航图,NavHost,NavController

导航图: 导航图xml资源文件包含了导航相关的所有信息,包括导航目的地(指activity或fragment内容区域),以及操作(目的地之间的逻辑连接);
导航图

NavHost: 用于显示导航目标的容器,导航组件包含一个默认 NavHost 实现 (NavHostFragment),可显示 Fragment 目标。

NavController: 在 NavHost 中管理应用导航的对象。控制 NavHost 中目标内容的交换。

二、开始使用

使用Navigation实现Activity或Fragment之间的跳转操作

1、添加依赖:

def nav_version = "2.3.3"
// Kotlin
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

// Feature module Support
implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

// Testing Navigation
androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"

// Jetpack Compose Integration
implementation "androidx.navigation:navigation-compose:1.0.0-alpha08"

2、创建Fragment

创建LoginFragment和RegisterFragment,以及对应的xml布局文件。
在主布局文件中添加控件FragmentContainerView:

<androidx.fragment.app.FragmentContainerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/fragment_container_view"
        android:name="androidx.navigation.fragment.NavHostFragment"
        app:defaultNavHost="true"
        app:navGraph="@navigation/nav_config"/>

该控件就是显示Fragment的容器,
android:name属性用于指定NavHost实现类的名称,使用androidx.navigation.fragment.NavHostFragment就可以。
defaultNavHost="true" 表示拦截系统返回按钮。
app:navGraph属性指定要绑定的导航图
该控件的id属性是必须有的,否则会报错。

3、创建导航图

在res下创建navigation目录,在该目录下创建导航图xml资源文件。
在根标签< navigation >中添加< fragment >标签,指定id和name属性,name属性指定对应Fragment类。

在< fragment >标签下添加< action >标签,该标签就是跳转操作,指定id,以及destination要跳转到哪个fragment。

给根标签< navigation >添加app:startDestination属性,指定一开始显示的fragment。

<?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" android:id="@+id/nav_config"
    app:startDestination="@id/login_fragment">

    <fragment android:id="@+id/login_fragment"
        android:name="com.example.navigationdemo.fragment.LoginFragment">

        <action android:id="@+id/to_register_page"
            app:destination="@+id/register_fragment"/>

    </fragment>

    <fragment android:id="@+id/register_fragment"
        android:name="com.example.navigationdemo.fragment.RegisterFragment">
    </fragment>
   
</navigation>

4、执行跳转操作

先在loginFragment布局文件中加入一个按钮用于跳转到registerFragment界面。在按钮点击事件中编写跳转代码:

//跳转到注册界面
findNavController().navigate(R.id.to_register_page)

执行跳转操作很容易,只要调用findNavController()方法获取NavController对象实例,然后调用navigate()方法就可以了,方法中传入要执行的action标签的id。

5、传参

使用Bundle进行数据传递,创建Bundle对象,将数据保存bundle中,将bundle对象作为第二个参数传递给navigate()方法

//传参
val bundle = Bundle()
bundle.putString("userName", userNameEt.text.toString())
findNavController().navigate(R.id.to_register_page,bundle)

在registerFragment中,调用成员变量arguments的getString()方法得到数据:

val userName = arguments?.getString("userName")

如果是跳转到一个Activity时,如何得到传递过来的数据呢?
在Activity中是没有arguments这个变量的,但我们可以通过intent来获取数据:

val userName = intent.getStringExtra("userName")
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Jetpack是一组用于Android应用程序开发的库集合,旨在帮助开发者简化开发流程、提高生产力和应用性能。它提供了一些常用的组件和工具,可以帮助开发者解决常见的开发问题。 要使用Android Jetpack,您需要在您的项目中添加相关的Jetpack库依赖。您可以通过在项目的build.gradle文件中添加相应的依赖来实现。例如,要使用Navigation组件,您可以添加以下依赖: implementation "androidx.navigation:navigation-fragment-ktx:2.3.5" implementation "androidx.navigation:navigation-ui-ktx:2.3.5" 一旦您添加了所需的依赖,您可以开始使用Jetpack组件了。对于Navigation组件,您可以使用Navigation图形化界面来创建和管理应用程序中的导航结构,并使用NavController来处理导航操作。 另外,为了更好地理解和学习Android Jetpack,您可以借助官方文档和示例代码来深入学习。官方文档提供了详细的介绍和用法示例,而示例代码可以帮助您更好地理解如何在实际项目中应用Jetpack组件。 总结起来,要使用Android Jetpack,您需要添加相关的库依赖,并根据具体的组件使用文档进行配置和使用。通过深入学习官方文档和示例代码,您可以更好地理解和掌握Jetpack使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Android Jetpack架构开发,从入门到实战,看这一篇就够了](https://blog.csdn.net/Eqiqi/article/details/127534594)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Android JetPack学习](https://blog.csdn.net/weixin_39069034/article/details/100170739)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值