Android kotlin 基础知识codelab Fragment Summary

news2025/1/14 0:57:01

创建 fragment

在此 Codelab 中,您向 AndroidTrivia 应用添加了一个 fragment,在本课的后续两个 Codelab 中您将继续在此应用中执行操作。

  • fragment 是 activity 的模块化部分。
  • fragment 有自己的生命周期,会接收自己的输入事件。
  • 使用 <fragment> 标签在 XML 布局文件中为 fragment 定义布局。
  • 膨胀onCreateView()中 fragment 的布局。
  • 您可以在 activity 运行期间添加或移除 fragment。

定义导航路径

导航组件
如需使用 Android 导航库,您需要执行一些设置:

  • 在模块级build.gradle文件中为 navigation-fragment-ktxnavigation-ui-ktx添加依赖项。

  • 在项目级build.gradle文件中为 navigationVersion添加 ext变量。
    导航目的地是指用户导航到的 fragment、activity 或其他应用组件。导航图定义了从一个导航目的地到下一个导航目的地的可能路径。

  • 如需创建导航图,请创建一个类型为Navigation的新 Android 资源文件。该文件定义了应用中的导航流。该文件位于 res/navigation文件夹中,通常名为 navigation.xml

  • 如需在 Navigation Editor 中查看导航图,请打开 navigation.xml文件,然后点击 Design标签页。

  • 您可以使用 Navigation Editor 向导航图中添加目的地,如 fragment。

  • 如需定义从一个目的地到另一个目的地的路径,请使用导航图创建连接这两个目的地的操作。在 navigation.xml文件中,每个连接都表示为具有 ID action

导航宿主 fragment 通常名为 NavHostFragment,它充当导航图中 fragment 的宿主:

  • 当用户在导航图中定义的目的地之间移动时,NavHostFragment会换入或换出 fragment 并管理 fragment 返回堆栈。
  • activity_main.xml布局文件中,NavHostFragment由名为 android:name="androidx.navigation.fragment.NavHostFragment" fragment 元素表示。

如需定义当用户点按某个视图(例如按钮)时要显示哪个 fragment,请为该视图设置 onClick 监听器:

  • onClick监听器中,对视图调用findNavController().navigate()
  • 指定通向目的地的 actionID

条件导航是指在一种情况下导航到一个屏幕,而在另一种情况下导航到另一个屏幕。如需创建条件导航,请执行以下操作:

  1. 使用 Navigation Editor 从起始 fragment 到每个可能的目的地 fragment 创建一个连接。
  2. 为每个连接指定唯一的 ID。
  3. View的点击监听器方法中,添加相应的代码以检测条件。然后,对视图调用findNavController().navigate(),并传入相应操作的 ID。

返回按钮
系统的返回按钮通常位于设备的底部。默认情况下,用户按返回按钮后会导航回他们最近查看的屏幕。在某些情况下,您可以控制用户按返回按钮后会转到何处:

  • 在 Navigation Editor 中,您可以使用 Attributes窗格来更改操作的 popUpTo设置。此设置会从返回堆栈中移除目的地,其作用是确定用户按返回按钮后会转到何处。
  • navigation.xml文件中,popUpTo设置显示为 popUpTo属性。
    在这里插入图片描述
  • 选中popUpToInclusive 复选框时,会将popUpToInclusive 属性设置为true。系统会从返回堆栈中移除直到并包括此目的地在内的所有目的地。
  • 如果操作的 popUpTo 属性设置为应用的起始目的地且popUpToInclusive设置为true,则用户按返回按钮后会直接退出应用。

向上按钮
Android 应用中的屏幕可以有屏幕上的向上按钮,该按钮将显示在应用栏的左上角。(应用栏有时称为操作栏。)向上按钮会根据屏幕之间的层次关系使用户在应用的屏幕中“向上”导航。

导航控制器的 NavigationUI库与应用栏相集成,让用户能够通过点按应用栏中的向上按钮,从应用中的任意位置返回应用的主屏幕。

如需将导航控制器关联到应用栏,请执行以下操作:

  1. onCreate() 中,对 NavigationUI 类调用 setupActionBarWithNavController(),并传入导航控制器:
val navController = this.findNavController(R.id.myNavHostFragment)
NavigationUI.setupActionBarWithNavController(this,navController)
  1. 替换 onSupportNavigateUp()方法以在导航控制器中调用 navigateUp()
override fun onSupportNavigateUp(): Boolean {
        val navController = this.findNavController(R.id.myNavHostFragment)
        return navController.navigateUp()
    }
}

选项菜单
选项菜单是指用户从应用栏中点按带有三个垂直点的图标 ...来访问的菜单。如需创建一个选项菜单,让其包含的菜单项显示 fragment,请确保 fragment 具有 ID。然后,定义选项菜单,并为菜单项的 onOptionsItemSelected() 处理程序编码。

  1. 确保 fragment 具有 ID:
  • 向导航图中添加目的地 fragment,并注意 fragment 的 ID。(如果愿意,您可以更改 ID。)
  1. 定义选项菜单:
  • 创建一个类型为 Menu的 Android 资源文件,该文件通常名为 options_menu.xml。该文件存储在 Res > Menu文件夹中。
  • 在设计编辑器中打开 options_menu.xml文件,然后将一个 Menu Item微件从 Palette窗格拖动到菜单。
  • 为方便起见,请将菜单项的 ID 设为与用户点击此菜单项时要显示的 fragment 的 ID 相同。此步骤不是必需操作,但会使为菜单项的 onClick行为编码变得更容易。
  1. 为菜单项的 onClick处理程序编码:
  • 在显示选项菜单的 fragment 或 activity 中,在 onCreateView()中,调用setHasOptionsMenu(true)以启用选项菜单。
  • 实现onCreateOptionsMenu() 以膨胀选项菜单:
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
        super.onCreateOptionsMenu(menu, inflater)
        inflater.inflate(R.menu.options_menu, menu)
}
  • 替换 onOptionsItemSelected()方法以在用户点击菜单项时采取适当的操作。以下代码显示了与菜单项具有相同 ID 的 fragment。(仅当菜单项和 fragment 具有完全相同的 ID 值时,此代码才有效。)
override fun onOptionsItemSelected(item: MenuItem): Boolean {
     return NavigationUI.
            onNavDestinationSelected(item,requireView().findNavController())
            || super.onOptionsItemSelected(item)
}

抽屉式导航栏
抽屉式导航栏是从屏幕边缘滑出的一个面板。用户可以通过两种方式来打开抽屉式导航栏:

  • 在任意屏幕上从起始边缘(通常是左侧边缘)滑动。
  • 使用应用顶部的应用栏中的抽屉式导航栏按钮(三条线)。在这里插入图片描述
    如需向应用中添加抽屉式导航栏,请执行以下操作:
  1. 将依赖项添加到 build.gradle (app)
  2. 确保每个目的地 fragment 都有一个 ID。
  3. 创建抽屉式导航栏的菜单。
  4. 将抽屉式导航栏添加到 fragment 的布局。
  5. 将抽屉式导航栏连接到导航控制器。
  6. 设置应用栏中的抽屉式导航栏按钮。

下面更为详细地介绍了这些步骤。

  1. 将依赖项添加到 build.gradle
  • 抽屉式导航栏是 Material Components for Android 库的一部分。将 Material 库添加到 build.gradle (app) 文件:
dependencies {
   ...
   implementation "com.google.android.material:material:$supportlibVersion"
   ...
}
  1. 为每个目的地 fragment 指定一个 ID:
  • 如果可以从抽屉式导航栏到达某个 fragment,请在导航图中将其打开,以确保它具有一个 ID。
  1. 创建抽屉式导航栏的菜单:
  • 为抽屉式导航栏菜单创建一个类型为 Menu (通常名为 navdrawer_menu )的 Android 资源文件。这样会在 Res > Menu 文件夹中创建一个新的 navdrawer_menu.xml 文件。
  • 在设计编辑器中,将 Menu Item 微件添加到 Menu
  1. 将抽屉式导航栏添加到 fragment 的布局:
  • 在包含导航宿主 fragment 的布局(它通常是主布局)中,使用 <androidx.drawerlayout.widget.DrawerLayout> 作为根视图。
  • 将一个 <com.google.android.material.navigation.NavigationView> 视图添加到布局中。
  1. 将抽屉式导航栏连接到导航控制器:
  • 打开创建导航控制器的 activity。(主 activity 通常是您在此处想要的 activity。)在 onCreate() 中,使用 NavigationUI.setupWithNavController() 将抽屉式导航栏与导航控制器连接起来:
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(
      this, R.layout.activity_main)
NavigationUI.setupWithNavController(binding.navView, navController)
  1. 设置应用栏中的抽屉式导航栏按钮:
  • 在创建导航控制器的 activity(它通常是主 activity)的 onCreate() 中,将抽屉式导航栏布局作为第三个参数传递给 NavigationUI.setupActionBarWithNavController
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(
   this, R.layout.activity_main)

NavigationUI.setupActionBarWithNavController(
   this, navController, binding.drawerLayout)
    ```
- 如需将向上按钮与抽屉式导航栏按钮一起使用,请修改  ```onSupportNavigateUp()  ```以返回  ```NavigationUI.navigateUp() ```。将导航控制器和抽屉式导航栏布局传递给  ```navigateUp() ```。
```kotlin
override fun onSupportNavigateUp(): Boolean {
  val navController = this.findNavController(R.id.myNavHostFragment)
  return NavigationUI.navigateUp(navController, drawerLayout)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/74631.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宝宝经常吐奶,除了拍嗝,这6个细节也不容忽视,别因小失大

众所周知&#xff0c;宝宝吐奶是很常见的。不过&#xff0c;虽然很常见&#xff0c;但只要宝宝吐奶&#xff0c;尤其是宝宝吐奶时&#xff0c;家长们都会非常心疼&#xff0c;迫不及待地想代替宝宝承受这些不适。为什么宝宝这么容易吐奶&#xff1f;首先&#xff0c;宝宝的胃是…

JQuery 基础

JQuery对象和JS对象区别与转换 1. JQuery对象在操作时&#xff0c;更加方便。 2. JQuery对象和js对象方法不通用的. 3. 两者相互转换 * jq -- > js : jq对象[索引] 或者 jq对象.get(索引) * js -- > jq : $(js对象) <script>//1.通过…

定时执行专家 —— 模拟键盘按键、鼠标单击功能发布(可发送快捷键、热键、鼠标左键多次单击)

目录 ◆ 定时执行专家 —— 模拟键盘按键 ◆ 定时执行专家 —— 模拟鼠标单击 ◆ 定时执行专家 —— 模拟键盘按键 - 设置方法 &#xff08;1&#xff09;点击 “定时执行专家” 工具栏 “新建” 图标&#xff0c;打开 “任务对话框”&#xff08;图1&#xff09;&#xff1…

Spring中的Bean的实例化

Bean的实例化1. Bean的配置2.Bean的实例化2.1 构造器实例化2.2 静态工厂方式实例化2.3 实例工厂方式实例化1. Bean的配置 Spring 可以被看作是一个大型工厂&#xff0c;这个工厂的作用就是生产和管理 Spring 容器中的Bean。如果想要在项目中使用这个工厂&#xff0c;就需要开发…

Android开发【全面理解Activity】

一、 Activity的生命周期 和其他手机 平台 的应用 程序 一样&#xff0c;Android的应用程序 的生命周期是被统一掌控 的&#xff0c;也就是说我们写的应用程序命运掌握在别人&#xff08;系统&#xff09;的手里&#xff0c;我们不能改变它&#xff0c;只能学习并适应它。 简…

一年一度的云计算春晚——亚马逊云科技re:Invent

一年一度的云计算春晚——亚马逊云科技re:Invent&#xff0c;近日盛大开幕。那么“云计算春晚”发布了什么AI产品&#xff1f; 首先来看Amazon SageMaker&#xff0c;今年是其发布的第五年&#xff0c;各行各业已有数百万个机器学习模型使用该服务管理&#xff0c;每月进行数千…

支付服务-----功能实现逻辑

支付服务实现逻辑 简单概况一下支付服务的实现逻辑 通过支付宝的沙箱环境来模拟支付功能&#xff0c;用户点击支付宝的链接后给后端发/aliPayOrder请求&#xff0c;封装支付宝需要payVo对象&#xff0c;并且调用 String pay alipayTemplate.pay(payVo)和 return pay&#xf…

A-LEVEL经济例题解析及练习Economic Question

每日一练 例题 Question: Consumer surplusA. Find Marginal Buyer’s WTP (Willingness to Pay) at Q10. B. Find Consumer Surplus for P30. Suppose P falls to $20. How much will Consumer Surplus increase due to: C. buyers entering the market D. existing buyers pa…

mysql8安装过程

1下载地址 https://downloads.mysql.com/archives/community/ 根据自己电脑系统环境选择操作系统和版本&#xff0c;本人选择下载的是windows 64位&#xff0c; 2.创建并编写my.ini文件 创建一个文本文档将文件名改为my后缀为ini my.ini配置其中basedir跟datadir自行根据加…

发布了二十年的《敏捷宣言》是否依然适用?

敏捷宣言已经诞生二十年&#xff0c;这份简短却“颠覆”规则的文件&#xff0c;帮助我们将产品开发交付的方式&#xff0c;从长途运输变成了“次日达”一样的存在。当下的我们正处在一个持续创新的世界&#xff0c;面对技术变革洪流&#xff0c;有时候我们可能会产生思考&#…

day42 文件包含LFIRFI伪协议编码算法代码审计

前言&#xff1a; #知识点&#xff1a; 1、解释-什么是文件包含 2、分类-本地LFI&远程RFI 3、利用-配合上传&日志&会话 4、利用-伪协议&编码&算法等 #核心知识&#xff1a; 1、本地包含LFI&远程包含RFI-区别 一个只能包含本地&#xff0c;一个可…

操作系统例题合集(持续更新)

传送门 由于操作系统知识太多&#xff0c;再加上我总结的比较细&#xff0c;所以一片放不下&#xff0c;拆分成了多篇文章。 操作系统笔记——概述、进程、并发控制 操作系统笔记——储存器管理、文件系统、设备管理 操作系统笔记——Linux系统实例分析、Windows系统实例分析 …

模拟和矢量信号源进阶使用技巧

前言 通常射频信号源的简单应用通常只是输入频率、功率&#xff0c;加上一些模拟、数字调制&#xff0c;然而要充分挖掘出信号源的潜力和性能需要更多的技巧。本应用指南会告诉您可以通过更多的方式提高射频信号源输出信号的质量&#xff0c;具体内容包括&#xff1a; 1. 提高…

【LeetCode_字符串_逻辑分析】6. Z 字形变换

目录考察点第一次&#xff1a;2022年12月9日10:58:17解题思路代码展示题目描述6. Z 字形变换 将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时&#xff0c;排列如下&#xf…

DAP组件外部服务开发说明

DAP数据分析平台主要是为了满足企业数据分析的需要而开发的一款产品&#xff0c;不同于一般的BI平台&#xff0c;DAP数据分析平台更侧重数据的聚合&#xff0c;平台预置有数据源注册、ODS注册与管理、数仓配置与数据聚合&#xff0c;从而实现企业业务数据的统一&#xff0c;构建…

不掌握这些坑,你敢用BigDecimal吗?

背景 一直从事金融相关项目&#xff0c;所以对BigDecimal再熟悉不过了&#xff0c;也曾看到很多同学因为不知道、不了解或使用不当导致资损事件发生。 所以&#xff0c;如果你从事金融相关项目&#xff0c;或者你的项目中涉及到金额的计算&#xff0c;那么你一定要花时间看看…

C++ 特殊类的设计

文章目录1. 设计一个只能在堆上创建对象的类2. 设计一个只能在栈上创建对象的类3. 设计一个类不能被拷贝4. 设计一个类 不能被继承5. 设计一个类&#xff0c;只能创建一个对象前言&#xff1a; 在本文中&#xff0c;我们掌握几种常见的特殊类的设计。1. 设计一个只能在堆上创建…

微信小程序使用vant 和 mobx 自动定义Tabbar

vant 和 mobx 自动定义Tabbar 在此案例中&#xff0c;用到的主要知识点如下&#xff1a; 自定义组件 Vant 组件库 MobX 数据共享 组件样式隔离 组件数据监听器 组件的 behaviors Vant 样式覆盖 1.首先需要给我们的app.json 配置tabBar “custom”&#xff1a;true 注意点&…

代码随想录算法训练营第五十九天| LeetCode503. 下一个更大元素 II、LeetCode42. 接雨水

一、LeetCode503. 下一个更大元素 II 1&#xff1a;题目描述&#xff08;503. 下一个更大元素 II&#xff09; 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数字 x 的…

实践 DevOps 测试策略

什么是 DevOps 测试策略&#xff1f; DevOps 的一个重要组成部分是持续集成/持续交付(CI/CD)&#xff0c;在 CI 和 CD 之间的就是持续测试。 如果不进行持续测试&#xff0c;将会出现&#xff1a; 缺陷的泄漏软件延期交付客户不满意DevOps 测试策略的好处 可以提供更快的反…