关于startActivityForResult()方法被弃用的解决方案

news2024/10/7 18:23:12

关于startActivityForResult()方法被弃用的解决方案

背景:使用startActivityForResult()方法时,代码出现划线,显示该方法已被弃用

在这里插入图片描述

startActivityForResult() 方法是一种用于在 Android 应用程序中启动另一个活动(Activity)并期望在被启动的活动完成后接收结果的机制。

通过调用 startActivityForResult() 方法,你可以传递一个 Intent 对象来启动目标活动,并指定一个整数参数作为请求码(requestCode),用于标识这个请求。这个请求码在后续的结果处理中起到唯一标识的作用,以便你知道是哪个请求返回了结果。

被启动的活动可以通过调用 setResult() 方法来设置其结果。这个结果可以是一个表示成功、失败或其他状态的结果代码,还可以携带额外的数据作为结果的一部分。被启动的活动在完成后会被销毁,然后会返回到调用活动(即发起 startActivityForResult() 方法的活动)。

调用 startActivityForResult() 方法后,你可以通过重写调用活动的 onActivityResult() 方法来处理返回的结果。在 onActivityResult() 方法中,你可以检查请求码,并根据请求码来确定是哪个请求返回了结果,然后处理相应的逻辑。

这种机制通常用于实现活动之间的交互和数据传递,比如从一个活动中获取用户输入或选择的结果,在另一个活动中展示或处理这些结果。

下面是一个使用了startActivityForResult() 方法的简单示例

在调用活动(发起请求的活动)中:

public class MainActivity extends AppCompatActivity {
    private static final int REQUEST_CODE = 1; // 请求码

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button startButton = findViewById(R.id.start_button);
        startButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivityForResult(intent, REQUEST_CODE);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == REQUEST_CODE) {
            if (resultCode == RESULT_OK) {
                String result = data.getStringExtra("result");
                Toast.makeText(this, "Received result: " + result, Toast.LENGTH_SHORT).show();
            } else if (resultCode == RESULT_CANCELED) {
                Toast.makeText(this, "Activity canceled", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

在被调用活动中:

public class SecondActivity extends AppCompatActivity {
    private EditText inputEditText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        inputEditText = findViewById(R.id.input_edit_text);

        Button doneButton = findViewById(R.id.done_button);
        doneButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String result = inputEditText.getText().toString();

                Intent resultIntent = new Intent();
                resultIntent.putExtra("result", result);
                setResult(RESULT_OK, resultIntent);
                finish();
            }
        });

        Button cancelButton = findViewById(R.id.cancel_button);
        cancelButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setResult(RESULT_CANCELED);
                finish();
            }
        });
    }
}

在上述示例中,MainActivity 是调用活动,SecondActivity 是被调用活动。当用户点击 startButton 按钮时,MainActivity 会启动 SecondActivity 并传递一个请求码(REQUEST_CODE)。在 SecondActivity 中,用户可以输入一些文本,并点击 doneButton 按钮将输入的文本作为结果返回给 MainActivity,或者点击 cancelButton 按钮取消操作。

在 MainActivity 的 onActivityResult() 方法中,我们检查返回的结果,并根据结果码(REQUEST_CODE)处理逻辑。如果结果码为 RESULT_OK,则表示操作成功,我们从返回的 Intent 中获取结果数据并显示一个 Toast。如果结果码为 RESULT_CANCELED,则表示操作被取消。

但是,startActivityForResult() 方法在较新的 Android 版本中已被弃用,解决方案是使用 startActivityForResult(Intent, int, Bundle) 方法来代替。该方法允许你向要启动的活动传递附加数据。通过将 Bundle 对象作为第三个参数传递,你可以在发送给活动的 Intent 中包含额外的数据。

以下是使用 startActivityForResult(Intent, int, Bundle) 方法的示例:

// 创建一个新的 Intent 对象
Intent intent = new Intent(this, MyActivity.class);

// 创建一个 Bundle 对象来存储数据
Bundle extras = new Bundle();
extras.putString("key", "value");

// 将 Bundle 作为第三个参数传递给 startActivityForResult()
startActivityForResult(intent, REQUEST_CODE, extras);

注意,REQUEST_CODE 参数是一个整数,你可以定义它来标识活动的结果。当活动结束时,它将返回结果给调用活动,同时返回 REQUEST_CODE。你可以使用该代码确定哪个活动返回了结果。

在接收活动中,你可以这样获取到发起活动传来的数据:

extras = getIntent().getExtras();
if (extras != null) {
    String value = extras.getString("key");
}

在接收活动中,通过 getIntent() 方法可以获取到启动它的 Intent 对象。然后,通过调用 getExtras() 方法,你可以获取到传递给目标活动的附加数据的 Bundle 对象。

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

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

相关文章

Charles抓包

mac 1、下载安装包 官网下载:Download a Free Trial of Charles • Charles Web Debugging Proxy 2、有效期: 打开Charles > Help > Register Charles > 输入 Registered Name : https://zhile.io License Key:48891…

“正大杯”第十三届市场调查与分析大赛[省一]经验总结+复盘

目录 1 前期组队 2 队员组成 队长-成员1 应用统计学专业 成员2 化学实验专业 成员3-本人 物联网工程专业 成员4 金融ACCA专业 成员5 应用物理学 总结 3 比赛进度 3月中旬 部分图表的制作 问卷设计与制作 稍微改动主题 问卷相关总结 前期调查部分论文框架 3月…

手拉手教您Linux搭建web

文章目录 前言1. 本地搭建web站点2. 测试局域网访问3. 公开本地web网站3.1 安装cpolar内网穿透3.2 创建http隧道,指向本地80端口3.3 配置后台服务 4. 配置固定二级子域名5. 测试使用固定二级子域名访问本地web站点 转载自cpolar文章:Linux CentOS本地搭建…

【2023 · CANN训练营第一季】应用开发深入讲解——第四章 DVPP初级

学习资源 1.JPEG图片解码 文档 2.图片缩放 文档 媒体数据处理 数据预处理的典型使用场景 数据预处理的多种方式 分为两种,AIPP和DVPP DVPP数据预处理功能 了解两个重要概念 宽stride 和 高stride 理解:这里假设一张图片的宽为500,高为3…

SpringBoot Properties YML文件的优先级

SpringBoot启动文件的优先顺序测试 运行时指定加载文件时,最高Java jar spring.config.location优先于spring.profiles.activeJava -jar 三种语法 运行时不指定加载文件时,其次1.项目路径下的config目录优先级最高---12.项目路径的优先级其次---23.Eclip…

linux:查找相关命令find与grep

find 语法 在指定目录下查找文件和目录。 find [path] [expression]path:是要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,如果未指定路径,则默认为当前目录。 exp…

Kotlin高级协程

Kotlin高级协程 一.前言二.先从线程说起三.协程的设计思想四.协程特点:优雅的实现移步任务五.协程基本使用六.协程和线程相比有什么特点,如何优雅的实现异步任务 一.前言 在文章正式上干货之前,先说一点背景吧;我是 Kotlin 协程官…

C语言初阶之扫雷代码详解(含递归展开)

扫雷代码详解 扫雷代码思路头文件解析主函数解析函数文件解析①初始化函数(InitBoard)②打印函数③难易选项函数(Select)④布雷(SetMine)⑤获取周边雷数(GetMine)⑥展开函数&#xf…

从零开始,轻松打造Web自动化测试框架:Python+Selenium实战指南

在程序员的世界中,一切重复性的工作,都应该通过程序自动执行。「自动化测试」就是一个最好的例子。 随着互联网应用开发周期越来越短,迭代速度越来越快,只会点点点,不懂开发的手工测试,已经无法满足如今的…

广州虚拟动力亮相2023世界元宇宙生态博览会,邀您解锁元宇宙商机

2023年5月10-12日 2023第2届世界元宇宙生态博览会 在广州广交会展馆正式举办! 广州虚拟动力携虚拟数字人全栈式解决方案参展 诚邀您莅临3.2馆A109-A110展位参观交流 2022年全国多个地方出台元宇宙政策文件,各地方政府的元宇宙产业扶持政策也在逐渐细…

webshell及工具

目录 一,Webshell的概念 二,eval函数的定义和用法 三,连接工具菜刀 3.1文件管理 3.2 虚拟终端 3.3 菜刀与burpsuite联动 四,哥斯拉的使用 五,冰蝎 六,webshell分类 七,webshell如何连接 …

哪个牌子的电视盒子好用?罗鹏数码盘点2023电视盒子排名

电视机资源少、卡顿,配置不足的时候只需要安装一台电视盒子就可以解决这些问题,不需要花费大价钱更换电视机。那么,你知道哪个牌子的电视盒子好用吗?今天罗鹏就来详细聊聊这个话题,分享2023最新电视盒子排名。 一&…

在家经济性雾视训练

如何使用睛延宝进行雾视训练,才能缩轴控度? 雾视的相关概念 首先大家要知道什么是雾视? 顾名思义,雾视就是眼睛看目标物时有点模糊,好像有层雾。 雾视的效果:放松睫状肌,拉薄晶状体,增厚脉络膜。 原理就…

如何与劳氏 Lowe‘s 建立EDI连接?

劳氏Lowes(以下简称:Lowes)是专门从事家庭装修的美国零售公司,而 EDI 则是电子数据交换的缩写,是指通过计算机网络进行企业间电子数据交换的一种标准化方式。 通过 EDI,企业与Lowes之间可以直接交换各种商…

【Java笔试强训 35】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥年会抽奖…

六、FM1288调试方案-调试过程及细节

本篇文章,主要讲述实际调试操作:具体到需要调节哪些寄存器,调节完后,会有什么样的变化。但是整体效果不能达到我们期望的绝对感觉,所以我先把我们调试的结果放在前面,如果觉得不理想,也可以不看后面的内容了。 文章目录 1. 调试准备1.1 建立与FM1288芯片通信1.2 Uart结…

IPv6有哪些优势?

现有的互联网是在IPv4协议的基础上运行的。IPv6是下一版本的互联网协议,也可以说是下一代互联网的协议,它的提出最初是因为随着互联网的迅速发展,IPv4定义的有限地址空间将被耗尽,而地址空间的不足必将妨碍互联网的进一步发展。 为…

1.100ASK-V853-PRO编译烧写

100ASK_V853-PRO 环境配置及编译烧写 0.前言 本章主要介绍关于100ASK_V853-PRO开发板的Tina SDK包的下载和编译打包生成镜像,并将镜像烧录到100ASK_V853-PRO开发板上。在进行100ASK_V853-PRO开发板的环境配置前需要获取配置虚拟机系统,可以参考&#x…

【HA】HomeAssistant 添加 小米温湿度计2代

本方法只是被动的获取小米温湿度计广播出的温度和湿度数据,并没有其他更多功能。 0. 本人配置 树莓派3B Debian 11 (Bullseye) 64 位 Supervisor 2023.05.dev0901 HomeAssistant 已安装 HACS 1. 安装 打开侧边栏中的HACS,点击“集成” 右下角找到“…

ACM - DP - 提高2 (状态机 + 状态压缩 + 区间 + 树形 + 数位 + 单调队列优化 + 斜率优化)

DP 类型题二 【跳转DP 类型题一 (模型:数字三角形最长上升子序列背包】一、状态机模型1、AcWing 1057. 股票买卖 IV :两个状态转换2、AcWing 1058. 股票买卖 V :三个状态转换3、AcWing 1052. 设计密码 :T 维状态转换 …