在这里插入图片描述

三三要成为安卓糕手

一:Activity之间的数据传输

问题:不同的Activity之间怎么进行数据传输呢?

比如第一个页面中有一些字符串数据之类的要通过数据传输,传递给第二个页面进行显示的

1:MainActivity做处理

在定义一个按钮,和一个文本输入框

	<Buttonandroid:id="@+id/btn_second3"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="携带数据,跳转到Second页面"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/btn_second2"/><EditTextandroid:id="@+id/et_data"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入一些数据"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/btn_second3"/>
        findViewById(R.id.btn_second3).setOnClickListener(this);etData = findViewById(R.id.et_data);

继续在onClick方法中写一个else if()

		else if (id == R.id.btn_second3) {Intent intent = new Intent(this, SecondActivity.class);String string = etData.getText().toString();if(string != null && string.length() > 0){intent.putExtra("key_data",string);               }startActivity(intent);}

(1)putExtra

Extra翻译为额外;它的作用是在通过 Intent 启动另一个组件(如 Activity)时,携带一些额外的数据

有点Cookie和Session会话的味道了,记住这里的key值一定要匹配

(2)逻辑梳理

从输入框中获取string字符串

2:SecondActivity做处理

xml布局自己定义一个TextView,此处略

		Intent intent = getIntent();String keyData = intent.getStringExtra("key_data");TextView textView = findViewById(R.id.text_view);if(keyData != null && keyData.length() > 0){textView.setText(keyData);}

这边呢接收数据,并让string显示在页面上

看一下两者联系

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3:效果

效果就这样,第二个页面(右图)接受到了,就显示出来

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

二:Activity之间的数据回传

问题:MainActivity怎么接收SecondActivity回传的数据

1:MainActivity做处理

(1)startActivityForResult

<Buttonandroid:id="@+id/btn_second4"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="跳转到Second页面,等待Second返回数据"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/et_data"/>
		findViewById(R.id.btn_second4).setOnClickListener(this);
		else if (id == R.id.btn_second4) {//老方式startActivityForResult(new Intent(this, SecondActivity.class),9);}
  • startActivityForResult方法在安卓API30以后已经过时了,但是很多商业中也会用到这个玩意,也得学bro

    • 参数一:Intent 对象,“要启动哪个页面”,也可以在 Intent 里用 putExtra 携带数据传给目标页面。
    • 参数二:requestCode(请求码),给这次跳转打个 “标记 9”,等目标页面返回数据时,能通过这个标记识别 “这是 btn_start_second4 按钮跳转的返回”。

(2)onActivityResult

@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == 9 && resultCode == 8){int keyComeBackNum = data.getIntExtra("key_comeBackNum", 0);String keyComeBackString = data.getStringExtra("key_comeBackString");Log.i(TAG, "onActivityResult: num = " + keyComeBackNum);Log.i(TAG, "onActivityResult: string = " + keyComeBackString);etData.setText(keyComeBackNum + keyComeBackString);}}
  • requestCode:“请求码”,自己定义的一个整数标记,这里是9; 区分 “是哪一次启动 Activity 的请求”

    • 比如:一个页面有多个按钮,都用 startActivityForResult 跳转到不同页面,靠 requestCode 就知道 “这次返回的数据,对应之前哪个按钮的跳转” 。
  • resultCode:“结果码”,是目标 Activity 返回的状态标记

  • data:一个 Intent 对象,是目标 Activity 返回的 “数据载体”; 记得判空

    • getInExtra取到的值如果为空,默认为0

2:SecondActivity做处理

在SecondActivity的xml中在定义一个Button控件

<Buttonandroid:id="@+id/btn_back"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="往MainActivity回传数据"app:layout_constraintTop_toTopOf="parent"app:layout_constraintStart_toStartOf="parent"/>

(1)setResult

		findViewById(R.id.btn_back).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {int comeBack = 798;String string = "surprise ma da faker";Intent backIntent = new Intent();backIntent.putExtra("key_comeBackNum",comeBack);backIntent.putExtra("key_comeBackString",string);setResult(8,backIntent);finish();}});
  • setResult(8,backIntent),这里我们的结果码就是8

3:逻辑梳理

  • 启动时

    • 通过 startActivityForResult(intent, 9) 启动 SecondActivity,这里的 9 就是 requestCode(请求码)。
  • 目标页面返回时
    SecondActivity 中,需要通过 setResult(8, data) 来设置返回结果:

    • 第一个参数 8 就是 resultCode(结果码,自定义的标记)
    • 第二个参数 dataIntent 对象,通过 putExtra 存入数据(key_comeBackNumkey_comeBackString
  • 接收返回时:回到当前页面的 onActivityResult 方法:

    • 通过 requestCode == 9 判断:“这是之前用请求码 9 启动的页面返回的结果”
    • 通过 resultCode == 8 判断:“目标页面返回了结果码 8 的状态”
    • data 中取出携带的 key_comeBackNumkey_comeBackString,并更新到 etData 输入框中

4:finish问题延伸

提问:在第二个页面做了一些数据后,不马上finish,而是手动关闭,这个时候回传的数据还能收到吗

最后一句代码finish删掉;finish的作用就是,点击btn_bakc2这个按钮后activity_second这个页面就退出了

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里我们点击返回按钮,同样MainActivity能接收到传回来的数据,并不受影响

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三:Activity数据回传的新方式

1:.launch

用于启动目标 Activity 并等待其返回结果的核心方法。它的作用类似于传统的 startActivityForResult()

创建点击事情的准备工作

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

		//跳转到第二个页面,等待回传数据else if (id == R.id.btn_second5) {activityResultLancher.launch(new Intent(this, SecondActivity.class));}

2:registerForActivityResult

可以理解一个接收Activity结果的注册器,负责 “结果回调”,能在当前 Activity中优雅接收、处理返回的数据。

是传统的startActivityForResult + onActivityResult 机制的平替

private ActivityResultLauncher<Intent> activityResultLancher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {@Overridepublic void onActivityResult(ActivityResult o) {int resultCode = o.getResultCode();//返回的结果码Intent data = o.getData();//返回的数据if (resultCode == 8) {int keyComeBackNum = data.getIntExtra("key_comeBackNum", 0);String keyComeBackString = data.getStringExtra("key_comeBackString");Log.i(TAG, "onActivityResult: key_comeBackNum = " + keyComeBackNum);Log.i(TAG, "onActivityResult: key_comeBackString" + keyComeBackString);etData.setText("接受到的数据是" + keyComeBackString + keyComeBackNum);}}});

(1)new ActivityResultContracts.StartActivityForResult()

作用:启动一个 Activity 并获取其返回结果

ActivityResultContracts 是一个包含多种预定义合约(Contract)的工具类,StartActivityForResult 是其中一个静态内部类

(2)new ActivityResultCallback()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作用:回调接口,当被启动的 Activity 关闭并返回结果时触发

重写onActivityResult方法,((20250808114147-zw40xjr “前面我们已经使用过这个方法,但是两者形参不同,”))ActivityResult中包括结果码(resultCode)返回的数据(data)

(3)o.getResultCode()

(4)o.getdata()

3:结果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#语言的语法(数据类型)

数据类型 表2.1给出了C#的主要数据类型。注意&#xff0c;基本类型的长度与计算机或操作系统的类型无关。C# 中的字符是16位的宽度&#xff0c;可以表示非拉丁语言中的所有字符。它使用一种叫双字节码的字符编码 系统&#xff0c;其中定义了绝大多数可书写语言的数以千计的字符…

Vue3 + TypeScript全局阻止非输入区域的Backspace键,防止回退页面

main.ts/*** 应用程序主入口** 初始化 Vue 应用并挂载到 DOM*/ import "./assets/style/main.scss";import { createApp } from "vue"; // 全局引入element-plus&#xff0c;对打包后的文件大小不是很在乎&#xff0c;那么使用全局导入会更方便 import Ele…

01数据结构-堆排序

01数据结构-堆排序前言1.堆2.堆的操作逻辑3.堆的代码实现前言 数据结构中的堆是一种结构&#xff0c;C语言的堆是空间管理的程序员malloc&#xff0c;free的空间&#xff0c;两者没多大关系。 1.堆 逻辑上 堆&#xff08;Heap&#xff09;是一类基于完全二叉树的特殊数据结构…

在线课程|基于SprinBoot+vue的在线课程管理系统(源码+数据库+文档)

在线课程 目录 基于SprinBootvue的在线课程管理系统 一、前言 二、系统设计 三、系统功能设计 1 管理员模块的实现 2在线课程 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|…

Python海象运算符:=

文章目录简介​​条件判断优化循环控制简化​推导式高效计算​正则匹配与数据提取​性能对比参考文献简介 海象运算符 :&#xff0c;又称​​赋值表达式​​&#xff08;Assignment Expression&#xff09;&#xff0c;Python 3.8 后可用&#xff0c;PEP 572 引入&#xff0c;…

Vue 2 项目中快速集成 Jest 单元测试(超详细教程)

在 Vue 项目中编写单元测试&#xff0c;是提升代码质量和维护性的关键一步。本文将带你从零开始&#xff0c;在一个 Vue 2 Vue CLI 项目中集成 Jest 作为单元测试框架&#xff0c;并运行第一个测试用例。✅ 适用于 Vue 2 项目&#xff08;如你使用的是 vue-cli-service&#x…

PostgreSQL15——管理表空间

管理表空间一、基本概念二、创建表空间三、修改表空间四、删除表空间一、基本概念 在 PostgreSQL 中&#xff0c;它是通过表空间&#xff08;Tablespaces&#xff09;来实现逻辑对象&#xff08;表、索引等&#xff09;与物理文件之间的映射。创建数据库或者数据表&#xff08…

趣打印高级版--手机打印软件!软件支持多种不同的连接方式,打印神器有这一个就够了!

软件介绍&#xff08;文末获取&#xff09;趣打印高级版是一款手机打印软件。软件支持五种不同的连接方式&#xff0c;每种都有稳定且快速的反应&#xff0c;用户均可通过手机进行打印机的远程使用和设置。软件还支持上传不同格式的文档类型进行打印&#xff0c;方便快捷&#…

【开源框架】7 款流行的 Vue 3 后台管理框架对比

以下是 7 个流行的 Vue 3 后台管理框架在 Star 数&#xff08;截至 2025 年 8 月21日的 GitHub 最新数据&#xff09;、框架特点、基于的技术栈及开源协议四个方面的详细对比&#xff1a; 1. Vue-Vben-Admin GitHub 地址&#xff1a;https://github.com/vbenjs/vue-vben-admin…

Datawhale工作流自动化平台n8n入门教程(一):n8n简介与平台部署

前言 在数字化时代&#xff0c;重复性的工作任务正在消耗着我们大量的时间和精力。从数据同步到营销自动化&#xff0c;从客户服务到内容管理&#xff0c;这些琐碎但必要的任务往往让我们疲于应对。而工作流自动化工具的出现&#xff0c;为我们提供了一个优雅的解决方案。 今天…

SRE - 定位与能力

仅为个人知识总结与记录 Site Reliability Engineer&#xff1a;站点可靠性工程&#xff08;SRE 软件工程师 运维专家 可靠性专家&#xff09; 相对传统的运维工程师&#xff0c;SER 注重开发&#xff0c;效率&#xff0c;追求自动化。对于 SRE 工程师&#xff0c;追究的就是…

StarRocks学习4-查询优化与性能调优

✅ 1. 执行计划分析&#xff08;EXPLAIN&#xff09; &#x1f31f; 作用&#xff1a; 用于查看 SQL 的执行路径&#xff0c;判断是否命中索引、物化视图、Join 策略、并行度等。 &#x1f4cc; 常用命令&#xff1a; EXPLAIN SELECT ...; EXPLAIN VERBOSE SELECT ...;&#x1…

CentOS系统安装Git全攻略

文章目录✅ 方法一&#xff1a;使用 yum 或 dnf 包管理器安装&#xff08;推荐&#xff09;1. 更新系统软件包(非必须)[^1]2. 安装 Git3. 验证安装✅ 方法二&#xff1a;从源码编译安装&#xff08;适用于需要自定义版本或配置&#xff09;1. 安装依赖包2. 下载 Git 源码3. 编译…

VR交通安全学习机-VR交通普法体验馆方案

VR交通安全学习机是一种基于虚拟现实技术的互动式教育设备&#xff0c;旨在通过虚拟环境模拟真实的交通场景&#xff0c;帮助用户深入了解交通规则、交通信号、道路安全等知识&#xff0c;并通过沉浸式的体验让他们亲身感受到不遵守交通规则的后果。无论是驾驶员、行人还是骑行…

算法题(188):团伙

审题&#xff1a; 本题需要我们通过解析所有人之间的关系&#xff0c;从而判断出朋友团体的总个数并输出 思路&#xff1a; 方法一&#xff1a;扩展域并查集 由于这里涉及对朋友/敌人等关系集合的频繁操作&#xff0c;所以我们需要使用并查集来操作&#xff0c;但是普通的并查集…

C++开发/Qt开发:单例模式介绍与应用

单例模式是软件设计模式中最简单也是最常用的一种创建型设计模式。它的核心目标是确保一个类在整个应用程序生命周期中只有一个实例&#xff0c;并提供一个全局访问点。笔者白话版理解&#xff1a;你创建了一个类&#xff0c;如果你希望这个类对象在工程中应用时只创建一次&…

Linux笔记---策略模式与日志

1. 设计模式设计模式是软件开发中反复出现的问题的通用解决方案&#xff0c;它是一套套被反复使用、多数人知晓、经过分类编目的代码设计经验总结。设计模式并非具体的代码实现&#xff0c;而是针对特定问题的抽象设计思路和方法论。它描述了在特定场景下&#xff0c;如何组织类…

关于多个el-input的自动聚焦,每输入完一个el-input,自动聚焦到下一个

讲解原理或者思路&#xff1a;如果你有多个el-input,想要实现每输入完一个输入框&#xff0c;然后自动聚焦到下一个输入框&#xff0c;同理&#xff0c;如果每删除一个输入框的值&#xff0c;自动聚焦到上一个输入框。条件那么首先要做的就是&#xff0c;设置条件&#xff0c;在…

AI 赋能教育变革:机遇、实践与展望

引言说明教育在社会发展中的重要地位&#xff0c;以及传统教育面临的困境。引出 AI 技术为教育变革带来新机遇&#xff0c;阐述研究其在教育中应用的价值。AI 为教育带来的机遇个性化学习支持&#xff1a;讲解 AI 通过分析学生学习数据&#xff0c;如答题情况、学习时间等&…

(一)八股(数据库/MQ/缓存)

文章目录 项目地址 一、数据库 1.1 事务隔离级别 1. 事务的四大特性 2. Read Uncommited脏读(未提交读) 3. Read Commited幻读(sql默认已提交读) 4. Repeatable Read 5. Serializable 6. Snapshot(快照隔离) 7. 代码开启 8. For update和Repeatable Read的区别 1.2 各种锁 …