Android之navigation导航栏详解

目录

一、概念

二、使用步骤

1、首先要加入依赖

2、创建导航图

3、添加navHost将关系显示出来:

4、设置开始的界面

5、使用navController切换导航栏

1、如何找到navCotroller

2、实现导航栏的切换

6、切换回来(也是一样的):

7、管理堆栈信息:

 8、在目的地之间传递数据:

1、添加插件:

2、在需要参数的destination中配置这个界面的参数类型和名称:

9、加入动画


一、概念

navigation是一个框架,用于在Android应用中的目标之间导航,该框架提供一致的API,无论目标作为fragment、activity还是其他组件实现

navigation包含navigation graph、navHost、navController三个部分,这三个部分配合使用来实现界面的切换

Navigation graph:一个xml文件,包含了所有的界面的切换(也就是所有导航目的地以及他们之间如何连接)

NavHost:一个容器,显示导航图的一些东西,里面包含当前导航目的地的ui元素,当用户在应用中导航时,实际上是在navHost中对目的地进行切换(实际上navhost是一个抽象类,实现类是navHostFragment)

NavController: 用来管理目的之间的导航,提供了在目的地之间导航、处理深度链接、管理返回栈等方法。

二、使用步骤

1、首先要加入依赖

implementation("androidx.navigation:navigation-ui-ktx:2.6.0")
implementation("androidx.navigation:navigation-fragment-ktx:2.8.3")

2、创建导航图

ResourceManager->点击加号(添加资源到模块)->file name(mian_nav)->可以在create new destination中快速的创建fragment

3、添加navHost将关系显示出来:

使用NavHostFragment将Nav_graph里面的fragment显示出来

4、设置开始的界面

右击->选择set as Start Destionation

如何找到起始界面呢?其实其实界面上会有一个小房子的图标,小房子的图标在哪那就是起始界面。

5、使用navController切换导航栏

1、如何找到navCotroller

注意:在activity和fragment以及view中找到navCotroller中的方法是不一样的

在activity中:

//找到navController
//1、找到对应的NavHostFragment
val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragmentContainerView2) as NavHostFragment
//2、得到NavHostFragment管理的NavController
val navController = navHostFragment.navController
//3、使用vav_graph里面的action实现切换
navController.navigate(R.id.action_homeFragment_to_detailFragment)

在fragment中找到导航栏控制器


val navController = findNavController()

知道了一个view找到导航栏控制器:

mBinding.root.findNavController()

2、实现导航栏的切换

普通切换

navController.navigate(R.id.action_homeFragment_to_detailFragment)

 

使用选项(navoptions)进行导航:(也可以在xml下的action那里设置)切换的一些具体操作

  

 binding.textView2.setOnClickListener {

       findNavController().navigate(R.id.action_welcomeFragment_to_homeFragment,null, navOptions {

           anim {

               enter = android.R.animator.fade_in

               exit = android.R.animator.fade_out

           }

       })

   }

}

6、切换回来(也是一样的):

只要有那根线就可以了

 

7、管理堆栈信息:

在进行导航切换时,通常会将每一个界面(或视图)压入一个栈中,这个栈称为“导航栈”。每当用户导航到新界面时,新的界面会被推入栈顶。当用户后退时,当前界面会被弹出栈,返回到之前的界面。

popUpTo:将这个栈上面的界面全部弹出

而popUpToInclude:是否将自己也弹出栈,true是弹出,弹出了就回不来了

注意: 在导航切换回来时如果没有设置singTop就会在栈顶重新生成一个新的界面

但当singleTop为true如果栈顶有一个相同的就不会在重新生成

singleTop是在action中设置

 8、在目的地之间传递数据:

1、添加插件:

适用于Java或Java和kotlin混编的模块:

plugins {

  id 'androidx.navigation.safeargs'

}

仅适用于kotlin的模块:

plugins {

  id 'androidx.navigation.safeargs.kotlin'

}

同时还要在grable里配置一下这个:

plugins {

    id("com.android.application") version "8.7.2" apply false

    id("org.jetbrains.kotlin.android") version "1.8.0" apply false

    id ("androidx.navigation.safeargs") version "2.8.3" apply false//替换classPath

}

2、在需要参数的destination中配置这个界面的参数类型和名称:

普通类型:

传递数据方:

接收数据方:

传递引用类型的数据:

先定义类:

在这里找到类名,在设置名称

传递数据方:

9、加入动画

可以在切换时的选择navOptions里加入动画

 binding.textView2.setOnClickListener {

       findNavController().navigate(R.id.action_welcomeFragment_to_homeFragment,null, navOptions {

           anim {

               enter = android.R.animator.fade_in

               exit = android.R.animator.fade_out

           }

       })

   }

}

也可以在导航图这里设置

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值