Android之navigation导航栏详解

06-01 1081阅读

目录

一、概念

二、使用步骤

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

Android之navigation导航栏详解

Android之navigation导航栏详解

Android之navigation导航栏详解

Android之navigation导航栏详解

Android之navigation导航栏详解

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

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

Android之navigation导航栏详解

Android之navigation导航栏详解

4、设置开始的界面

右击->选择set as Start Destionation

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

Android之navigation导航栏详解

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、切换回来(也是一样的):

只要有那根线就可以了

Android之navigation导航栏详解

 

7、管理堆栈信息:

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

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

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

Android之navigation导航栏详解

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

Android之navigation导航栏详解

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

singleTop是在action中设置

Android之navigation导航栏详解

 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中配置这个界面的参数类型和名称:

普通类型:

Android之navigation导航栏详解

传递数据方:

Android之navigation导航栏详解

接收数据方:

Android之navigation导航栏详解

传递引用类型的数据:

先定义类:

Android之navigation导航栏详解

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

Android之navigation导航栏详解

传递数据方:

Android之navigation导航栏详解

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
           }
       })
   }
}

也可以在导航图这里设置

Android之navigation导航栏详解

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码