Android Jetpack的 Navigation 组件(学习笔记)

Navigation 是 Android Jetpack 中的一个组件,旨在简化 Android 应用程序中的导航和屏幕间的交互。它提供了一种简单而强大的方式来管理应用程序中的导航,包括屏幕之间的导航、深链接和动画等。以下是关于 Navigation 组件的详细介绍和用法:

一、设置导航图

res/navigation 目录下创建导航图 XML 文件(navigation.xml),并在其中定义应用程序的所有目的地和连接它们的操作。NavGraph(导航图): 导航图是一个 XML 文件,它定义了应用程序中的所有目的地和导航路径。每个目的地都代表应用程序中的一个屏幕或操作,例如一个片段、活动或其他导航目标。导航图由目的地和连接它们的操作组成。一般使用一个homeFragment内嵌在navigation 作导航图。

将homeFragment作为起始点(一般一个导航图必须内嵌一个Fragment

二、配置导航宿主

1.NavHost(导航宿主): 导航宿主是一个容器视图,用于在应用程序的 UI 中显示导航图中的目的地。在 XML 布局中,通常使用 NavHostFragmentNavHostView 来定义导航宿主。

在 XML 布局文件中添加 NavHostFragmentNavHostView 作为容器来显示导航图中的目的地。回到activity_main.xml将刚才设置的navigation成为NavHostFragment 作为容器来显示导航图中的目的地。

2.设置导航图,点击该导航图的按钮将会跳转到另一个Fragment

 

结合Data Binding使用: Navigation 组件与 Data Binding 结合使用,可以简化目的地的布局文件,并在 XML 中执行导航操作

class HomeFragment : Fragment() {
    private val mBinding: FragmentHomeBinding by lazy{
        FragmentHomeBinding.inflate(layoutInflater)
    }
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return mBinding.root
    }
}

3. 设置另一个跳转Fragment页面(DownloadFragment)

三、执行导航操作

1.将导航图与Download页面设置导航

 2.设置监听事件

package com.example.applicationflow.fragment

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.fragment.findNavController
import com.example.applicationflow.R
import com.example.applicationflow.databinding.ActivityMainBinding
import com.example.applicationflow.databinding.FragmentHomeBinding

class HomeFragment : Fragment() {
    private val mBinding: FragmentHomeBinding by lazy{
        FragmentHomeBinding.inflate(layoutInflater)
    }
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return mBinding.root
    }
    //设置点击事件,点击导航图的按钮将跳转到Download下载页面
    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        mBinding.btnFlowAndDownload.setOnClickListener{
            findNavController().navigate(R.id.action_homeFragment2_to_downloadFragment2)
        }
    }
}

四、测试结果

跳转

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Imagine8877

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值