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

1、介绍:

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

       

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

Google开发者官方API

二、接入步骤

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

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

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

defaultNavHost:为true,设为默认host

navGraph:子fragment的配置路径

2、创建navigation(navGraph)

在res目录下新建navigation文件夹

 在gav_graph.xml下新增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_graph"
    app:startDestination="@id/fragment_one">


    <fragment
        android:id="@+id/fragment_one"
        android:name="com.example.wiik.testdemo.fragment.OneFragment" />

    <fragment
        android:id="@+id/fragment_two"
        android:name="com.example.wiik.testdemo.fragment.TwoFragment" />

    <fragment
        android:id="@+id/fragment_three"
        android:name="com.example.wiik.testdemo.fragment.ThreeFragment" />



</navigation>

如果你有几个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!!

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

添加item的切换监听:addOnDestinationChangedListener

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

返回上一个fragment:

controll?.navigateUp

其他API可以自行研究

三、总结

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值