当前位置: 首页 > news >正文

android navigation 用法详细使用

Navigation 的关键概念
1、Navigation Graph: 定义了应用内的所有导航目的地以及它们之间的连接。
2、NavHost: 一个 UI 元素,用于承载当前的导航目的地。
3、NavController: 管理目的地之间的导航。
4、Destination: 导航图中的一个节点,用户导航到该节点时,宿主会显示其内容。
5、Route: 用于导航的唯一标识符,可以是任何可序列化的数据类型
如何使用 Navigation

1、添加依赖:
在项目的 build.gradle 文件中添加 Navigation 组件的依赖

implementation "androidx.navigation:navigation-fragment:$nav_version"
implementation "androidx.navigation:navigation-ui:$nav_version"

2、创建导航图:
在 res 目录下创建一个新的导航目录,然后创建一个导航资源文件(例如 nav_graph.xml)。
3、配置导航图:
在导航图 XML 文件中添加 fragment 标签来定义目的地,并使用 action 标签定义它们之间的导航操作。

<navigation xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:id="@+id/nav_graph"><fragmentandroid:id="@+id/homeFragment"android:name="com.example.HomeFragment"android:label="Home"><actionandroid:id="@+id/action_homeFragment_to_detailsFragment"app:destination="@id/detailsFragment" /></fragment><fragmentandroid:id="@+id/detailsFragment"android:name="com.example.DetailsFragment"android:label="Details" />
</navigation>

4、在 Activity 中设置 NavHost:
在 Activity 的布局文件中添加 NavHostFragment,并将其与导航图关联。

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

5、导航到目的地:
使用 NavController 进行导航。

val navController = findNavController(R.id.nav_host_fragment)
navController.navigate(R.id.action_homeFragment_to_detailsFragment)

6、传递参数:
可以通过 Bundle 传递参数。

val bundle = Bundle().apply {putString("KEY", "value")
}
navController.navigate(R.id.action_homeFragment_to_detailsFragment, bundle)

7、处理导航事件:
可以监听导航事件,例如 onNavigateUp 来处理返回按钮的事件。

override fun onSupportNavigateUp(): Boolean {return findNavController(R.id.nav_host_fragment).navigateUp()|| super.onSupportNavigateUp()
}

8、自定义动画:
可以为导航操作设置自定义动画。

<actionandroid:id="@+id/action_homeFragment_to_detailsFragment"app:destination="@id/detailsFragment"app:enterAnim="@anim/slide_in_right"app:exitAnim="@anim/slide_out_left"app:popEnterAnim="@anim/slide_in_left"app:popExitAnim="@anim/slide_out_right" />
http://www.lryc.cn/news/453242.html

相关文章:

  • uni-app在线预览pdf
  • SpringBoot--为什么Controller是串行的?怎样才能并行?
  • C/C++ 中的未定义行为(Undefined Behavior, UB)
  • AJAX 1——axios体验、认识URL、常用请求方法、HTTP协议、错误处理、form-serialize插件
  • Java-运算符
  • ubutun nginx 安装和解决端口占用问题
  • 螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习01(环境准备)
  • 解决:使用layui.treeTable.updateNode,更新表格数据后,done里面的事件丢失问题
  • 【Linux】环境变量(初步认识环境变量)
  • 79. 单词搜索
  • [单master节点k8s部署]28.Istio流量管理(四)
  • Windows 11 安装配置 Git 教程
  • Go基础学习11-测试工具gomock和monkey的使用
  • PHP基础教程
  • Python或R时偏移算法实现
  • 华为云LTS日志上报至观测云最佳实践
  • Python--加载Hugging Face模型文件异常处理
  • 补码加/减运算的具体示例
  • macOS编译和运行prometheus2.54
  • flume系列之:flume jmx页面导出flume、java进程等全部指标
  • (17)MATLAB使用伽马(gamma)分布生成Nakagami-m分布的方法1
  • NFT 是什么?
  • mysql的学习
  • 微服务之间的相互调用的几种常见实现方式对比
  • FPGA时序分析和约束学习笔记-(1、FPGA基本原理)
  • 华为仓颉语言入门(9):for-in表达式
  • Vue3中使用axios
  • 国创——VR虚拟陪伴
  • 【Android 源码分析】Activity生命周期之onPause
  • ​IAR全面支持国科环宇AS32X系列RISC-V车规MCU