Android JetPack底部导航Navigation 组件的介绍与使用

1、介绍:

        在以前的应用中,针对多导航模块的使用,常见的有tabhost或者FragmentTabHost,但是这些在使用的过程中,非常臃肿,包括加载和管理也不如人意。在AndroidX中,官方引入Navigation模块,通过布局绑定fragment来完成

       

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

Google开发者官方API

二、接入步骤

1、在布局中新增一个fragment的view

    

name="androidx.navigation.fragment.NavHostFragment",固定写法,必须指向NavHostFragment

defaultNavHost:为true,设为默认host

navGraph:子fragment的配置路径

2、创建navigation(navGraph)

在res目录下新建navigation文件夹

Android JetPack底部导航Navigation 组件的介绍与使用_第1张图片

 在gav_graph.xml下新增fragment节点,配置如下





    

    

    



如果你有几个fragment,就新增多少个

app:startDestination:默认一开始加载哪个fragment,就指向该fragment的id

fragment的顺序随意,不受限制。

3、如何在Activity或者Fragment中引用

我们是通过NavController 来管理

public static NavController findNavController(@NonNull Activity activity, @IdRes int viewId)

1,、activity: 当前的宿主

2、viewId:就是fragment的id,testfragment,将layout的fragment加载进来

3、var controll = Navigation.findNavController(this, R.id.testfragment) as                                 NavController;

这样,我们就初始化好一个控制器。

动态加载导航到指定的child fragment,该fragment必须已添加到navigation目录下xml文件中,也就是当前加载的列表

切换fragment:

controll?.navigate(R.id.fragment_one)

注意:这个id一定是graph加载的xml文件中的,否则报错找不到

动态切换navigation 目录下xml的配置文件

1.先读取
var gavpath=controll?.navInflater?.inflate(R.navigation.nav_graph)
2.再设置
controll?.graph=gavpath!!

Android JetPack底部导航Navigation 组件的介绍与使用_第2张图片

备注:gavpath!!这种写法表示可为null,如果直接赋值,会提示错误。在变量后面加上 "!!"即可

添加item的切换监听:addOnDestinationChangedListener

controll?.addOnDestinationChangedListener {controller,destination,arguments->
    
    toast("${destination.displayName}")
    
}

返回上一个fragment:

controll?.navigateUp

其他API可以自行研究

三、总结

想比较以往的tabhost加载,这种导航比较轻量化,我们可以根据业务需求,将不同的加进去,实现动态配置,也方便管理

你可能感兴趣的:(AndroidUI,android,android,studio,android,ide)