Android笔记(五):结合Compose组件利用ActivityResultLauncher解决多活动跳转返回数据

news2025/2/25 13:51:02

在本人博客中Android活动返回不在再支持startActivityForResult()后的处理方法已经记录采用ActivityResultLauncher来处理多活动的返回并传回数据的方式。但是采用的是布局xml+viewBinding技术。目前,谷歌官方推荐使用JetPack Compose组件来定义界面。在本文中,将介绍在JetPack Compose定义的界面中ActivityResultLauncher的实现不同活动跳转并返回数据。
例:从MainActivity跳转到OtherActivity,并从OtherActivity返回。运行界面类似:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、定义MainActivity

在主活动中定义ActivityResultLauncher来处理从其他活动返回的处理。

val resultLauncher:ActivityResultLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult(),
ActivityResultCallback {
if(it.resultCode== Activity.RESULT_OK){
val returnData = it.data?.getStringExtra(“returnData”)
Toast.makeText(this,returnData,Toast.LENGTH_LONG).show()
}
})

具体代码如下:

class MainActivity : ComponentActivity() {
    private lateinit var resultLauncher: ActivityResultLauncher<Intent>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //注册活动结果,处理从其他活动返回的动作
        resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult(),
            ActivityResultCallback {
                if(it.resultCode== Activity.RESULT_OK){
                    val returnData = it.data?.getStringExtra("returnData")
                    Toast.makeText(this,returnData,Toast.LENGTH_LONG).show()
                }
            })
        setContent {
            ForCourseTheme {
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    JumpOtherScreen(resultLauncher)
                }
            }
        }
    }
}

@Composable
fun JumpOtherScreen(resultLauncher: ActivityResultLauncher<Intent>) {
    val context = LocalContext.current

    Box(modifier = Modifier.fillMaxSize().background(Color.Green),
        contentAlignment = Alignment.Center){
        Button(onClick={
            val intent = Intent(context,OtherActivity::class.java)
            intent.putExtra("data","从MainActivity跳转到OtherActivity")
            resultLauncher.launch(intent)
        }){
            Text("跳转到其他页面",fontSize = 30.sp,color = Color.White)
        }
    }
}

二、其他活动OtherActivity的处理

在其他活动中增加下列处理方式,来解决从当前活动返回上一个活动:

val intent = Intent()
intent.putExtra(“returnData”,“从OtherActivity返回”)
context.setResult(Activity.RESULT_OK,intent)
context.finish()
这里:context表示活动。

class OtherActivity : ComponentActivity() {
    @RequiresApi(Build.VERSION_CODES.TIRAMISU)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val receivedData = intent.getStringExtra("data")
        setContent {
            ForCourseTheme {
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    DisplayScreen(receivedData)
                }
            }
        }
    }
}

@Composable
fun DisplayScreen(data:String?){
    val context  = LocalContext.current as OtherActivity
    Box(contentAlignment = Alignment.Center,
        modifier = Modifier.fillMaxSize().background(Color.Blue)){
        Column{
            Text("OtherActivity界面接受的数据:${data!!}",fontSize = 30.sp,color= Color.White)
            Button(onClick={
                val intent = Intent()
                intent.putExtra("returnData","从OtherActivity返回")
                context.setResult(Activity.RESULT_OK,intent)
                context.finish()
            }){
                Text("返回到MainActivity",fontSize = 30.sp,color = Color.White)
            }
        }
    }
}

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

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

相关文章

DRESIS:全球首个综合耐药性数据库

耐药性已成为全球卫生保健的关键问题。目前已有的耐药相关数据库大都是针对某些疾病。本研究建立一个数据库DRESIS&#xff0c;全面描述具有耐药性的疾病和所有类型的耐药机制。公开访问网址&#xff1a;https://idrblab.org/dresis/ 01、ADTT:药物治疗靶点的变异; 02、IDUE:药…

cocos2d-x C++与Lua交互

Cocos版本&#xff1a; 3.10 Lua版本&#xff1a; 5.1.4 环境&#xff1a; window Visual Studio 2013 Lua Lua作为一种脚本语言&#xff0c; 它的运行需要有宿主的存在&#xff0c;通过Lua虚拟栈进行数据交互。 它的底层实现是C语言&#xff0c;C语言封装了很多的API接口&a…

【Jetpack Compose】BOM是什么?

前言 本篇旨在帮助小伙伴们了解和使用Compose中BOM相关的知识&#xff0c;在Compose的开发过程中更加便捷、统一的管理相关依赖信息。 BOM基础知识 Compose推出的BOM为物料清单的意思&#xff0c;BOM全称为Bill Of Materials&#xff0c;Compose推出BOM的意义旨在通过指定的…

【赠书活动】python自动售货机销售数据分析

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Win10删除文件需要TrustedInstaller权限的解决方法

在Win10电脑中&#xff0c;有时候在我们尝试删除某些文件或文件夹时&#xff0c;系统却提示要有TrustedInstaller权限才能删除成功。这是由于一些特定的系统文件或文件夹被保护&#xff0c;确保系统的稳定性和安全性。如果大家在删除文件也遇到这样的提示&#xff0c;那么可以按…

React18入门(第三篇)——React Hooks详解,React内置Hooks、自定义Hooks使用

文章目录 概述一、内置 Hook——useState1.1 响应式数据更新1.2 什么是 state1.3 state 特点&#xff08;一&#xff09;——异步更新1.4 state 特点&#xff08;二&#xff09;——可能会被合并1.5 state 特点&#xff08;三&#xff09;——不可变数据&#xff08;重要&#…

看一下链表结构

序、慢慢来才是最快的方法。 背景 链表(Linked List) 链表是一种常见的基础数据结构&#xff0c;是一种线性表。与顺序表不同的是&#xff0c;链表中的每个节点不是顺序存储的&#xff0c;而是通过节点的指针域指向到下一个节点。 1.链表的优缺点 2.链表的类型 单链表、双链表…

UDP 的报文结构

UDP的报文结构&#xff1a; 其中前面的源端口号和目的端口号&#xff0c;UDP长度和UDP检验和&#xff0c;它们都是2个字节。 那么什么是UDP长度呢&#xff0c;它指的是后面的数据的长度&#xff0c;换算单位也就是64kb&#xff0c;因此一个数据报&#xff08;数据&#xff09;最…

idea 启动项目报错 Command line is too long

1.idea 启动报错 Command line is too long&#xff0c;启动报错信息&#xff1a;Error running ‘Application‘: Command line is too long. 2.如何解决&#xff1f; 1&#xff09;idea打开一个项目。 2.打开项目下的*.idea* 文件夹下的 workspace.xml 文件。 3.在<co…

【高阶数据结构】图详解第三篇:最小生成树(Kruskal算法+Prim算法)

文章目录 最小生成树1. 最小生成树概念2. Kruskal算法算法思想代码实现测试 3. Prim算法算法思想代码实现测试 4. 源码 最小生成树 1. 最小生成树概念 在了解最小生成树之前&#xff0c;我们先来回顾一下生成树的概念&#xff0c;这是我们之前文章提到过的&#xff1a; 无向图…

QMA6100P 姿态传感器使用

QMA6100P 姿态传感器使用 项目用途&#xff1a;分析和记录设备位置信息变化&#xff08;设备安装在车辆内部&#xff09; 通讯接口&#xff1a;I2C&#xff0c;地址0x13&#xff0c;标准I2C通讯采用IO模拟 功能需求&#xff1a;读取三轴加速度 芯片初始化设置 参考手册说明和…

STM32 芯片怎么选型?

SMT32概览&#xff1a; STM32F051R8T6x xx 代表的含义 STM32MPU产品型号含义 STM32芯片封装&#xff1a;

浮点数运算以及溢出问题

一、浮点数加减运算的步骤 对阶&#xff1a;小阶向大阶对齐&#xff0c;阶小的那个数尾数右移&#xff0c;对于IEEE754标准表示的浮点数来说&#xff0c;右移时要注意将隐含的一位1右移到小数部分尾数加减&#xff1a;注意要先还原隐藏位尾数规格化&#xff1a;直到将第一位1移…

外汇天眼:外汇投资出入金难?教你一个快速到账的方法!

对于每一位投资者来说&#xff0c;在外汇市场中盈利赚钱才是最重要的事&#xff01;而对盈利来说最重要的事就是能够顺利地出入金&#xff01; 但在复杂的外汇市场中&#xff0c;摒弃黑平台&#xff0c;在正规平台出入金很多时候也并没有那么顺利&#xff0c;所以很多外汇投资…

MySQL常用脚本

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《ELement》。&#x1f3af;&#x1f3af; &#x1…

Godot2D角色导航-自动寻路教程(Godot实现角色随鼠标移动)

文章目录 运行结果2D导航概述开始前的准备2D导航创建导航网格创建角色 其他文章 运行结果 2D导航概述 Godot为2D和3D游戏提供了多个对象、类和服务器&#xff0c;以便于基于网格或基于网格的导航和路径查找。 说到导航&#xff0c;就得说一下导航网格&#xff0c;导航网格定义…

Design patterns--策略模式

设计模式之策略模式 笔者经常使用Modbus TCP和Modbus RTU通信协议&#xff0c;而两种的请求数据的格式不一样&#xff0c;故而采用策略模式来健壮整个工程项目。 代码示例 #ifndef MODBUS_H #define MODBUS_H #include <string>std::string convertToHex(unsigned char…

Spring framework Day09:JSR250注入注解

前言 JSR 250 是 Java Specification Request 的缩写&#xff0c;它定义了一组用于依赖注入和生命周期管理的注解。这些注解是在 Java EE 5 规范中引入的&#xff0c;用于简化和标准化开发企业级应用程序的依赖注入和生命周期管理。 一、开始学习 本次需要学习的依然是注解&…

淘宝商品品牌数据采集接口,淘宝商品详情数据接口,淘宝API接口

采集淘宝商品品牌数据&#xff0c;可以按照以下步骤进行&#xff1a; 确定采集目标&#xff1a;确定要采集的淘宝商品品牌和具体的产品类型。选择采集工具&#xff1a;可以选择爬虫、数据抓取工具等采集工具进行数据采集。设置采集参数&#xff1a;设置采集参数&#xff0c;包…

ROS中的图像数据

无论是USB摄像头还是RGBD摄像头&#xff0c;发布的图像数据格式多种多样&#xff0c;在处理这些数据之前&#xff0c;我们首先需要了解这些数据的格式。 二维图像数据 连接USB摄像头到PC端的USB接口&#xff0c;通过以下命令启动摄像头&#xff1a; roslaunch usb_cam usb_ca…