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

Android中的导航navigation的使用

Android中的导航(Navigation)是一种应用程序设计模式,它通过使用统一的用户界面来管理应用程序中的各种界面和交互。在Android中,导航主要通过使用Navigation SDK来实现,该SDK提供了一组工具和组件,可以帮助开发人员构建具有一致性和可访问性的用户界面。

下面是使用Android导航的详细步骤:

  1. 添加依赖项:首先,确保在项目的build.gradle文件中添加了Android Navigation的依赖项。可以使用Gradle或Maven进行管理。
dependencies {implementation 'androidx.navigation:navigation-fragment-ktx:2.x.x'implementation 'androidx.navigation:navigation-ui-ktx:2.x.x'
}
  1. 创建Navigation Graph:导航图(Navigation Graph)是一个XML文件,用于描述应用程序中的各种界面和交互。它定义了从一个界面到另一个界面的导航路径。可以使用Android Studio中的导航编辑器来创建和编辑导航图。
  2. 使用导航组件:导航SDK提供了多种导航组件,例如Navigation Drawer、Navigation Menu、Fragment Transitions等,可以根据需要选择合适的组件。可以使用布局编辑器将导航组件添加到布局文件中,并使用相应的代码进行配置。
  3. 配置界面:在导航图中定义了各种界面,包括Activity、Fragment等。需要将这些界面添加到导航图中,并指定它们之间的导航关系。
  4. 启动导航:可以使用Navigation类来启动导航。可以通过调用findNavController()方法获取对导航控制器(Navigation Controller)的引用,并使用该控制器来执行导航操作。
  5. 实现自定义导航动作:如果需要实现自定义导航动作,可以在导航图中定义自定义动作,并使用相应的代码实现。可以使用Navigation类提供的API来执行自定义动作,例如navigate()方法。
  6. 调试和测试:使用Android Studio中的调试工具和模拟器来测试应用程序中的导航功能,确保导航图和代码正确无误。

使用例子

如下是一个在Android中使用Kotlin进行导航的一个简单例子,涉及创建一个简单的应用程序,其中包含一个底部的导航栏,用户可以通过它从一个屏幕导航到另一个屏幕。以下是实现这一功能的基本步骤:

  1. 添加依赖项:确保在build.gradle(Module: app)文件中添加了Android Navigation组件的依赖项。
dependencies {implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'implementation 'androidx.lifecycle:lifecycle-fragment:2.4.1'
}
  1. 创建BottomNavigationView:在布局文件中添加BottomNavigationView
<!-- res/layout/activity_main.xml -->
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><androidx.bottomnavigation.widget.BottomNavigationViewandroid:id="@+id/nav_view"android:layout_width="0dp"android:layout_height="wrap_content"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:itemBackground="@color/colorPrimary"app:itemIconTint="@android:color/white"app:itemTextColor="@android:color/white" /></androidx.constraintlayout.widget.ConstraintLayout>
  1. 配置Navigation Graph:创建一个导航图,定义几个目标(Destinations),例如FirstFragment, SecondFragment, 和 ThirdFragment
<!-- res/navigation/nav_graph.xml -->
<navigation xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/nav_graph"app:startDestination="@+id/firstFragment"><fragmentandroid:id="@+id/firstFragment"android:name=".FirstFragment"android:label="First Fragment"tools:layout="@layout/fragment_first"><!-- 添加子导航 --><actionandroid:id="@+id/action_firstFragment_to_secondFragment"app:destination="@+id/secondFragment" /></fragment><fragmentandroid:id="@+id/secondFragment"android:name=".SecondFragment"android:label="Second Fragment"tools:layout="@layout/fragment_second"><actionandroid:id="@+id/action_secondFragment_to_thirdFragment"app:destination="@+id/thirdFragment" /></fragment><fragmentandroid:id="@+id/thirdFragment"android:name=".ThirdFragment"android:label="Third Fragment"tools:layout="@layout/fragment_third"/></navigation>
  1. 在Activity中设置NavController:在MainActivity中设置NavController并绑定到BottomNavigationView
// res/layout/activity_main.xml
// 引入NavController
import androidx.navigation.NavController
import androidx.navigation.NavDestination
import androidx.navigation.NavGraph
import androidx.navigation.Navigationclass MainActivity : AppCompatActivity() {private lateinit var navController: NavControlleroverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 获取BottomNavigationView的NavControllernavController = Navigation.findNavController(this, R.id.nav_view)// 设置NavController的监听器navController.addOnDestinationChangedListener { _, destination, _ ->when (destination.id) {R.id.firstFragment -> {// 执行第一个fragment的逻辑}R.id.secondFragment -> {// 执行第二个fragment的逻辑}R.id.thirdFragment -> {// 执行第三个fragment的逻辑}}}}
}
  1. 创建Fragments:创建三个Fragment,每个Fragment都有自己的布局和功能。
// res/layout/fragment_first.xml
<!-- 第一个Fragment的布局 -->class FirstFragment : Fragment() {override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {return inflater.inflate(R.layout.fragment_first, container, false)}// 第一个Fragment的方法和逻辑
}// res/layout/fragment_second.xml
<!-- 第二个Fragment的布局 -->class SecondFragment : Fragment() {override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {return inflater.inflate(R.layout.fragment_second, container, false)}// 第二个Fragment的方法和逻辑
}// res/layout/fragment_third.xml
<!-- 第三个Fragment的布局 -->class ThirdFragment : Fragment() {override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {return inflater.inflate(R.layout.fragment_third, container, false)}// 第三个Fragment的方法和逻辑
}

这个例子展示了一个基本的导航流程,用户可以在三个Fragment之间切换。每个Fragment都有其自己的布局和逻辑。通过底部的导航栏,用户可以导航到不同的Fragment。

使用例子2

使用Android Navigation库实现Fragment之间的跳转。下面是一个简单的例子,展示了如何在两个Fragment之间进行导航:

  1. 首先,创建一个Navigation Graph文件。在你的项目中的nav_graph.xml文件中,定义你的目的地和路径
<navigation xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/nav_graph"app:startDestination="@+id/fragment_home"><fragmentandroid:id="@+id/fragment_home"android:name=".ui.fragments.HomeFragment"android:label="Home"><actionandroid:id="@+id/action_home_to_about"app:destination="@id/fragment_about"/></fragment><fragmentandroid:id="@+id/fragment_about"android:name=".ui.fragments.AboutFragment"android:label="About"></fragment>
</navigation>

在这个例子中,我们有两个目的地:HomeFragment和AboutFragment。HomeFragment有一个到AboutFragment的跳转动作(action)。

  1. 在你的Activity中,获取NavController并启动动作。在你的Activity或Fragment的代码中,使用以下代码:
// 获取NavController
private lateinit var navController: NavController
val navGraph = Navigation.findNavController(this, R.id.nav_host_fragment) as NavController?// 启动动作
val destination = navGraph.destinationForId(R.id.action_home_to_about)?.let { it as? Destination } ?: Destination() // 使用你的动作ID替换R.id.action_home_to_about
val result = navController.navigate(destination) // 导航到AboutFragment

这样就成功地在两个Fragment之间进行了导航。当用户点击按钮或其他触发条件时,这个导航动作就会被启动。此外,跳转动作应该在Navigation Graph文件中定义。

相关文章:

Android中的导航navigation的使用

Android中的导航&#xff08;Navigation&#xff09;是一种应用程序设计模式&#xff0c;它通过使用统一的用户界面来管理应用程序中的各种界面和交互。在Android中&#xff0c;导航主要通过使用Navigation SDK来实现&#xff0c;该SDK提供了一组工具和组件&#xff0c;可以帮助…...

Clip算法解读

论文地址&#xff1a;https://arxiv.org/pdf/2103.00020.pdf 代码地址&#xff1a;https://github.com/OpenAI/CLIPz 中文clip代码&#xff1a;https://gitcode.com/OFA-Sys/Chinese-CLIP/overview 一、动机 主要解决的问题&#xff1a; 超大规模的文本集合训练出的 NLP 模…...

使用第三方远程连接工具ssh连接vagrant创建的虚拟机

vagrant默认密码都是vagrant 密码认证默认是关闭的&#xff0c;进入虚拟机&#xff0c;打开密码认证 1、使用命令vi /etc/ssh/sshd_config进入配置&#xff0c;注意要切换到root用户&#xff0c;这个配置root有权限 2、找到PasswordAuthentication默认为no,改为yes 3、重启虚…...

linux查找指定目录下包含指定字符串文件,包含子目录

linux查找指定目录下包含指定字符串的文件&#xff0c;包含子目录 linux查找指定目录下包含指定字符串的指定文件格式&#xff0c;包含子目录 指定目录 cd /home/www/linux查找指定目录下包含指定字符串的文件&#xff0c;包含子目录 grep -r "指定字符串"注释 gr…...

27. BI - PageRank 的那些相关算法 - PersonRank, TextRank, EdgeRank

本文为 「茶桁的 AI 秘籍 - BI 篇 第 27 篇」 Hi, 我是茶桁. 之前咱们用两节课的时间来讲了 PageRank, 包括它的起源, 公式以及工具. 并在一个希拉里邮件的案例中用networkx完成了练习. 在上一节课中, 咱们不仅做了案例, 并且说到了 PageRank 模型的影响力, 并且讲了其中一个…...

[数据集][目标检测]公共场所危险物品检测数据集VOC+YOLO格式1431张6类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1431 标注数量(xml文件个数)&#xff1a;1431 标注数量(txt文件个数)&#xff1a;1431 标注…...

创业项目开发(持续更新)

最近项目梳理&#xff1a; 一、业务目标 最重要的业务目标就是要能实现自己做事情赚钱。所以有两个维度&#xff0c;第一个维度就是最重要的就是自己做事情。第二个维度才是赚钱。 如果要自己做事情&#xff0c;需要什么样的事情&#xff0c;这个事情的目标是什么&#xff0…...

基于SpringBoot的“校园台球厅人员与设备管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“校园台球厅人员与设备管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统首页界面图…...

【Java数据结构】关于栈的操作出栈,压栈,中缀表达式,后缀表达式,逆波兰表达式详解

&#x1f525;个人主页&#xff1a;努力学编程’ &#x1f525;内容管理&#xff1a;java数据结构 上一篇文章我们讲过了java数据结构的链表&#xff0c;对于链表我们使用了它的一些基本操作&#xff0c;完成了扑克牌小游戏的操作&#xff0c;如果你感兴趣的话&#xff0c;点…...

wireshark 使用

wireshark介绍 wireshak可以抓取经过主机网卡的所有数据包&#xff08;包括虚拟机使用的虚拟网卡的数据包&#xff09;。 环境安装 安装wireshark: https://blog.csdn.net/Eoning/article/details/132141665 安装网络助手工具&#xff1a;https://soft.3dmgame.com/down/213…...

C++纯虚函数的使用

纯虚函数是一种在C中定义抽象基类的方法&#xff0c;它是一个在基类中声明但没有实现的虚函数。 纯虚函数需要在派生类中进行实现&#xff0c;否则派生类也会成为抽象类&#xff0c;无法直接实例化对象。 下面是关于纯虚函数的讲解和代码示例&#xff1a; 纯虚函数的定义&#…...

读所罗门的密码笔记06_共生思想(上)

1. 共生思想 1.1. 1997年5月11日&#xff0c;IBM公司的“深蓝”计算机在与国际象棋世界冠军加里卡斯帕罗夫的第二次对弈时击败了他 1.1.1. 这台超级计算机以3.5∶2.5的战绩胜出&#xff0c;登上了世界各地的新闻头条 1.2. Alpha Zero 1.2.…...

QA:ubuntu22.04.4桌面版虚拟机鼠标丢失的解决方法

前言 在Windows11中的VMWare Workstation17.5.1 Pro上安装了Ubuntu22.04.4&#xff0c;在使用过程中发现&#xff0c;VM虚拟机的鼠标的光标会突然消失&#xff0c;但鼠标其他正常&#xff0c;就是光标不见了&#xff0c;下面是解决办法。 内容 如下图&#xff0c;输入mouse&a…...

idea从零开发Android 安卓 (超详细)

首先把所有的要准备的说明一下 idea 2023.1 什么版本也都可以操作都是差不多的 gradle 8.7 什么版本也都可以操作都是差不多的 Android SDK 34KPI 下载地址&#xff1a; AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载 …...

1.5T数据惨遭Lockbit3.0窃取,亚信安全发布《勒索家族和勒索事件监控报告》

本周态势快速感知 本周全球共监测到勒索事件93起&#xff0c;近三周攻击数量呈现持平状态。 本周Lockbit3.0是影响最严重的勒索家族&#xff0c;Blacksuit和Ransomhub恶意家族紧随其后&#xff0c;从整体上看Lockbit3.0依旧是影响最严重的勒索家族&#xff0c;需要注意防范。 …...

喜讯!聚铭网络荣获《日志分类方法及系统》发明专利

近日&#xff0c;聚铭网络又喜获一项殊荣&#xff0c;其申报的《日志分类方法及系统》发明专利成功获得国家知识产权局的授权&#xff0c;正式荣获国家发明专利证书。 在信息化时代&#xff0c;网络安全问题日益凸显&#xff0c;日志分析作为保障网络安全的重要手段&#xff…...

每日一博 - 关于日志记录的最佳实践

文章目录 概述选择合适的日志等级打印函数的入参、出参打印日志对象要做判空处理&#xff0c;避免阻断流程推荐使用 Slf4j不用e.printStackTrace()打印日志低级别的日志输出&#xff0c;必须进行日志级别开关判断不打印重复日志打印全部的异常信息&#xff0c;方便定位问题核心…...

针对pycharm打开新项目需要重新下载tensorflow的问题解决

目录 一、前提 二、原因 三、解决办法 一、前提 下载包之前&#xff0c;已经打开了&#xff0c;某个项目。 比如&#xff1a;我先打开了下面这个项目&#xff1a; 然后在terminal使用pip命令下载&#xff1a; 如果是这种情况&#xff0c;你下载的这个包一般都只能用在这一个…...

<商务世界>《第29课 外贸展会上应注意的事项》

1 参展前需要知道的问题 1&#xff09;在开展前&#xff0c;是否发邀请给外商&#xff0c;告诉他们你的展位号&#xff0c;你的企业及产品的优势&#xff1f; 2&#xff09;你的展位布置是否能够吸引外商&#xff1f; 3&#xff09;你参展的产品是否具有个性&#xff0c;特色&…...

sklearn主成分分析PCA

文章目录 基本原理PCA类图像降维与恢复 基本原理 PCA&#xff0c;即主成分分析(Principal components analysis)&#xff0c;顾名思义就是把矩阵分解成简单的组分进行研究&#xff0c;而拆解矩阵的主要工具是线性变换&#xff0c;具体形式则是奇异值分解。 设有 m m m个 n n …...

WarcraftHelper:魔兽争霸III终极兼容性修复工具,5大核心功能全面优化游戏体验

WarcraftHelper&#xff1a;魔兽争霸III终极兼容性修复工具&#xff0c;5大核心功能全面优化游戏体验 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper …...

LED照明技术演进中的杰文斯悖论:从节能到光污染的双刃剑效应

1. 从“省电”到“光污染”&#xff1a;LED照明技术的双刃剑效应作为一名在电子工程和消费电子领域摸爬滚打了十几年的从业者&#xff0c;我见证了一波又一波的技术浪潮。从CRT到LCD&#xff0c;从机械硬盘到固态硬盘&#xff0c;每一次技术迭代都伴随着“更高效、更节能、更便…...

OpenClaw微信公众号插件wemp v2:双Agent路由与混合知识库实战

1. 项目概述&#xff1a;一个为OpenClaw设计的微信公众号插件如果你正在寻找一个能够将你的AI助手能力无缝接入微信公众号&#xff0c;实现自动化客服、智能问答甚至更复杂交互的解决方案&#xff0c;那么你找对地方了。wemp&#xff08;WeChat MP Plugin&#xff09;正是这样一…...

地表温度反演进阶:对比单窗算法与大气校正法,用ENVI/ERDAS分析Landsat 7 ETM+数据哪个更准?

地表温度反演技术深度对比&#xff1a;单窗算法与大气校正法的实战解析 遥感技术在地表温度反演领域的应用已经发展出多种成熟算法&#xff0c;其中单窗算法和大气校正法&#xff08;RTE&#xff09;是最为常用的两种方法。对于中高级遥感用户而言&#xff0c;理解这两种算法的…...

InferenceX推理引擎:从架构解析到生产部署的完整指南

1. 项目概述&#xff1a;为什么我们需要一个全新的推理引擎&#xff1f;最近在折腾大模型部署和推理优化时&#xff0c;我总感觉现有的开源方案&#xff0c;比如 vLLM、TGI 或者 TensorRT-LLM&#xff0c;虽然功能强大&#xff0c;但总有些“隔靴搔痒”的感觉。要么是配置复杂&…...

Ctool:一站式解决开发者的日常编码烦恼

Ctool&#xff1a;一站式解决开发者的日常编码烦恼 【免费下载链接】Ctool 程序开发常用工具 chrome / edge / firefox / utools / windows / linux / mac 项目地址: https://gitcode.com/gh_mirrors/ct/Ctool 在日常开发工作中&#xff0c;我们常常需要处理各种编码转换…...

Cadence Allegro 17.2 PCB设计避坑指南:从焊盘制作到封装绘制的完整流程

Cadence Allegro 17.2 PCB设计避坑指南&#xff1a;从焊盘制作到封装绘制的完整流程 刚接触Cadence Allegro 17.2的硬件工程师&#xff0c;往往会在焊盘制作和封装绘制环节踩不少坑。这些看似基础的操作&#xff0c;一旦参数设置不当或概念理解有误&#xff0c;轻则导致设计返工…...

从零到一:用MMDetection在Ubuntu 20.04上搭建Faster R-CNN模型(含完整配置与避坑指南)

从零到一&#xff1a;Ubuntu 20.04下MMDetection与Faster R-CNN实战全解析 当目标检测技术遇上PyTorch生态&#xff0c;MMDetection框架正在成为工业界和学术界的新宠。本文将带您完成从裸机到完整训练Faster R-CNN模型的实战旅程&#xff0c;特别针对Ubuntu 20.04系统和NVIDIA…...

避坑指南:在CentOS 7.5上成功安装Ansys 19.2的完整流程(附字体问题终极解决方案)

CentOS 7.5与Ansys 19.2黄金组合&#xff1a;工业仿真环境搭建实战手册 在工程仿真领域&#xff0c;Ansys作为行业标准工具链的核心组件&#xff0c;其Linux环境部署一直是技术人员的痛点。经过长达三个月的多版本交叉测试&#xff0c;我们意外发现CentOS 7.5与Ansys 19.2的组合…...

Cursor AI 编程助手配置优化:一键安装与自定义指南

1. 项目概述&#xff1a;为什么需要一套现成的 Cursor 配置&#xff1f;如果你和我一样&#xff0c;是 Cursor 的重度用户&#xff0c;那么你肯定经历过这样的阶段&#xff1a;刚上手时&#xff0c;觉得这个 AI 驱动的 IDE 简直是神器&#xff0c;但随着项目越来越复杂&#xf…...