Android笔记【17】返回数据的两种方法

目录

一、问题

二、具体分析

1、代码

2、区别

1. 目的和使用场景

resultLauncher

startActivity

2. 数据传递方式

3. 返回结果的管理

4. 代码示例对比

使用 resultLauncher 启动活动并处理返回结果:

使用 startActivity 启动活动(不处理返回):

总结

3、使用 startActivity 启动活动,也可以返回信息。因为有putExtra

区别总结

示例对比

1. 使用 startActivityForResult 和 onActivityResult(旧方法)

2. 使用 ActivityResult API(新方法)

目标活动返回结果示例

总结


一、问题

【15】【16】中两种处理方法的优劣对比

二、具体分析

1、代码

val intent = Intent(this@SecondActivity, MainActivity::class.java)
intent.putExtra("extra_data", data)
startActivity(intent)
        resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->if (result.resultCode == RESULT_OK) {val message = result.data?.getStringExtra("return_message")// 处理返回消息,例如显示 Toast 或 Log}}

2、区别

这两段代码在 Android 中用于处理活动(Activity)间的交互,但它们的功能和实现方式有显著区别。以下是对这两段代码的详细比较:

1. 目的和使用场景

resultLauncher
resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->if (result.resultCode == RESULT_OK) {val message = result.data?.getStringExtra("return_message")// 处理返回消息,例如显示 Toast 或 Log}
}
  • 目的:用于启动一个新活动并接收返回结果。
  • 使用场景:适合于需要从新活动中获取结果的场景。例如,你可能想从一个表单活动中获取用户输入的信息或选择的项。
startActivity
val intent = Intent(this@SecondActivity, MainActivity::class.java)
intent.putExtra("extra_data", data)
startActivity(intent)
  • 目的:用于启动一个新活动,通常不关心返回结果。
  • 使用场景:适合于简单的导航场景,例如从主界面跳转到设置页面,而不需要处理返回的数据。

2. 数据传递方式

  • resultLauncher:使用 ActivityResult API,可以获取新的活动返回的数据。调用 startActivityForResult 时,你可以通过设置 setResult 在新活动中返回数据。

  • startActivity:通过 IntentputExtra 方法将数据传递给目标活动,但不期望从目标活动返回数据。

3. 返回结果的管理

  • resultLauncher:注册后,使用 launch 方法启动新活动,并在回调中处理返回结果。通过 result 对象,你可以检查结果代码和获取返回的数据。

  • startActivity:启动活动后,无法直接获取返回结果,适合于一旦启动就不需要回传的数据场景。

4. 代码示例对比

使用 resultLauncher 启动活动并处理返回结果:
// 注册结果处理器
resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->if (result.resultCode == RESULT_OK) {val message = result.data?.getStringExtra("return_message")// 处理返回消息}
}// 启动活动
val intent = Intent(this, SecondActivity::class.java)
resultLauncher.launch(intent)
使用 startActivity 启动活动(不处理返回):
// 创建意图并传递数据
val intent = Intent(this, MainActivity::class.java)
intent.putExtra("extra_data", data)
startActivity(intent) // 启动活动

总结

  • resultLauncher 是用于启动活动并处理返回结果的现代方法,适合需要获取新活动返回信息的情况。
  • startActivity 是传统的启动活动方法,适合于不需要接收返回结果的简单导航。

选择使用哪种方法取决于你的具体需求:是否需要从新活动中获取结果,以及如何管理活动间的数据传递。

3、使用 startActivity 启动活动,也可以返回信息。因为有putExtra

通过 startActivity 启动活动时,确实可以使用 putExtra 传递数据到目标活动,这样目标活动可以使用 getIntent().getStringExtra() 等方法接收这些数据。然而,这与获取返回信息的方式有所不同。

区别总结

  1. 数据传递

    • putExtra:用于在启动活动时传递数据到目标活动。调用 putExtra 是在启动活动之前设置数据,目标活动可以通过 getIntent().getStringExtra() 等方法获取这些数据。
    • 返回结果:在目标活动中,可以通过 setResult() 方法设置返回结果,然后调用 finish() 来结束活动。在这种情况下,原活动可以使用 onActivityResult 方法来接收返回数据。
  2. 获取返回结果

    • startActivityForResult (旧方法):在启动活动时使用 startActivityForResult(intent, requestCode),然后在原活动中重写 onActivityResult 来处理返回的数据。
    • ActivityResult API (新方法):使用 registerForActivityResultActivityResultContracts,更简洁地处理返回结果。

示例对比

1. 使用 startActivityForResultonActivityResult(旧方法)
val intent = Intent(this, SecondActivity::class.java)
startActivityForResult(intent, REQUEST_CODE)

在原活动中处理返回结果:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {super.onActivityResult(requestCode, resultCode, data)if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {val message = data?.getStringExtra("return_message")// 处理返回消息}
}
2. 使用 ActivityResult API(新方法)

启动活动的原活动:

val resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->if (result.resultCode == RESULT_OK) {val message = result.data?.getStringExtra("return_message")// 处理返回消息}
}// 启动活动
val intent = Intent(this, SecondActivity::class.java)
resultLauncher.launch(intent)

目标活动返回结果示例

在目标活动中,你可以通过 setResult() 返回数据:

val returnIntent = Intent()
returnIntent.putExtra("return_message", "Hello from SecondActivity")
setResult(RESULT_OK, returnIntent)
finish() // 结束活动

总结

  • putExtra 主要用于在启动活动时传递数据到目标活动。
  • 返回结果 则需要使用 setResult() 和适当的方法来处理返回的数据。startActivity 本身并不处理返回结果,而是需要结合 onActivityResult 或新的 ActivityResult API 来实现。

因此,虽然可以在 startActivity 中传递数据,但实际获取返回结果的方式和机制是不同的。选择合适的方法取决于你的具体需求和代码结构。

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

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

相关文章

flutter修改状态栏学习

在flutter中如何动态更改状态栏的颜色和风格。 前置知识点学习 AnnotatedRegion AnnotatedRegion 是 Flutter 中的一个小部件,用于在特定区域中提供元数据(metadata)以影响某些系统级的行为或外观。它通常用于改变系统 UI 的外观&#xff…

功能篇:JAVA使用jwt

在Java中实现JWT(JSON Web Token)认证通常涉及以下几个步骤: 1. 添加依赖 2. 创建JWT工具类 3. 实现登录接口,生成JWT 4. 实现过滤器,验证JWT ### 1. 添加依赖 首先,你需要在项目中添加JWT库的依赖。如果…

Chrome扩展程序开发示例

项目文件夹内文件如下: manifest.json文件内容: {"manifest_version": 3,"name": "我的法宝","description": "我的有魔法的宝贝","version": "1.0","icons": {"…

前端知识1html

VScode一些快捷键 Ctrl/——注释 !——生成html框架元素 *n——生成n个标签 直接书写html的名字回车生成对应的标签 常见标签 span&#xff1a; <span style"color: red;">hello</span> <span>demo</span> span实现&#xff1a; 标题…

计算机键盘简史 | 键盘按键功能和指法

注&#xff1a;本篇为 “计算机键盘简史 | 键盘按键功能和指法” 相关文章合辑。 英文部分机翻未校。 The Evolution of Keyboards: From Typewriters to Tech Marvels 键盘的演变&#xff1a;从打字机到技术奇迹 Introduction 介绍 The keyboard has journeyed from a humb…

mongoDb的读session和写session权限报错问题

go在使用mongoDb时用到了全局会话&#xff0c;发现在创建的session的逻辑相同&#xff0c;首先会进行数据的查询&#xff0c;此时获取了全局session执行读操作&#xff0c;查询所有文档&#xff0c;则当前会话为读会话&#xff0c;当再去插入时发现会报错&#xff0c;此时sessi…

【C++】求第二大的数详细解析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述&#x1f4af;输入描述&#x1f4af;解题思路分析1. 题目核心要求2. 代码实现与解析3. 核心逻辑逐步解析定义并初始化变量遍历并处理输入数据更新最大值与次大值输…

redis-stack redisSearch环境安装搭建

RedisSearch在redis许可证变更之后显得是redis中的一大特色&#xff0c;闲来无事学习记录一下。 尝试通过源码编译redisSearch&#xff0c;貌似非常费劲&#xff0c;所以建议使用docker或者Linux的发行包进行安装redis-stack。redis-stack是基于redis的模块化机制进行一个扩展…

JavaCV录屏到网络流

1、pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.…

scala 编写 hdfs 工具类

scala 编写 hdfs 工具类 scala 创建 删除 hdfs 文件或目录 scala 上传 下载 hdfs 文件 scala 读取 写入 hdfs 文件 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi&quo…

从零用java实现 小红书 springboot vue uniapp (1)

前言 偶尔会用小红书发一些笔记 闲来无事 想自己实现一个小红书 正好可以学习一下 帖子 留言 im 好友 推送 等功能 下面我们就从零 开发一个小红书 后台依旧用我们的会员系统的脚手架 演示 http://120.26.95.195:8889/ 客户端我们使用uniapp 我们首先对主页进行一个分解 顶部我…

Cesium 按区域生成高度图

Cesium 按区域生成高度图 Cesium 按区域生成高度图 const cmd new CustomDrawCommand({vertexArray,shaderProgram,commandType: Compute,outputTexture: bufferColor,uniformMap,postExecute: () > {const url getImageByTexture(bufferAColor, gl);viewer.scene.primiti…

RESTful API设计原则与最佳实践

在当今的数字化时代&#xff0c;应用程序编程接口&#xff08;API&#xff09;已成为企业间数据交换、系统集成和业务扩展的关键工具。RESTful API作为一种基于HTTP协议的轻量级、无状态、可扩展的架构设计风格&#xff0c;在Web服务、移动应用、物联网等多个领域得到了广泛应用…

SpringMVC全局异常处理

一、Java中的异常 定义&#xff1a;异常是程序在运行过程中出现的一些错误&#xff0c;使用面向对象思想把这些错误用类来描述&#xff0c;那么一旦产生一个错误&#xff0c;即创建某一个错误的对象&#xff0c;这个对象就是异常对象。 类型&#xff1a; 声明异常&#xff1…

最小绝对偏差(Least Absolute Deviation, LAD)---子梯度法

最小绝对偏差&#xff08;Least Absolute Deviations&#xff0c;简称LAD&#xff09;是一种用于回归分析的统计方法&#xff0c;其目标是最小化残差的绝对值之和&#xff0c;而不是最小二乘法中的残差平方和。LAD回归特别适用于存在异常值的数据集&#xff0c;因为它对异常值不…

Linux - 进程等待和进程替换

进程等待 前面我们了解了如果父进程没有回收子进程, 那么当子进程接收后, 就会一直处于僵尸状态, 导致内存泄漏, 那么我们如何让父进程来回收子进程的资源. waitpid 我们可以通过 Linux 提供的系统调用函数 wait 系列函数来等待子进程死亡, 并回收资源. #include <sys/t…

mac下载安装jdk

背景 长时间不折腾mac全部忘记 特此记录 安装 1.下载jdk 根据需要下载对应的jdk 我直接 下载到/Applicatiions目录 https://www.oracle.com/java/technologies/downloads/#java8-mac 2.解压 cd /Applicatiions tar -zxvf jdk-8u431-macosx-x64.tar.gz 3.配置环境 …

【Java】—— 图书管理系统

基于往期学习的类和对象、继承、多态、抽象类和接口来完成一个控制台版本的 “图书管理系统” 在控制台界面中实现用户与程序交互 任务目标&#xff1a; 1、系统中能够表示多本图书的信息 2、提供两种用户&#xff08;普通用户&#xff0c;管理员&#xff09; 3、普通用户…

1-1.mysql2 之 mysql2 初识(mysql2 初识案例、初识案例挖掘)

一、mysql2 概述 mysql2 是一个用于 Node.js 的 MySQL 客户端库 mysql2 是 mysql 库的一个改进版本&#xff0c;提供了更好的性能和更多的功能 使用 mysql2 之前&#xff0c;需要先安装它 npm install mysql2 二、mysql2 初识案例 1、数据库准备 创建数据库 testdb CREAT…

[HDCTF 2023]LoginMaster

[HDCTF 2023]LoginMaster 知识点 quine注入 解题 用户名要为admin 查看robots.txt&#xff0c;查看源码 password是注入点 function checkSql($s) {if(preg_match("/regexp|between|in|flag||>|<|and|\||right|left|reverse|update|extractvalue|floor|subs…