Android Activity 之 startActivityForResult用法详解

安卓startActivityForResult实现多个Activity之间不同跳转流程 问题描述:需要从MainActivity跳转到B,再从B跳转到C,最后从C跳回到MainActivity 先定义activity_main.xml,如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/t 阅读详情

如果想在Activity中得到新打开Activity 关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新的Activity 关闭后会向前面的Activity传回数据,为了得到传回的数据,必须在前面的Activity中重写onActivityResult(int requestCode, int resultCode, Intent data)方法。

复制代码
package com.ljq.activitys;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
    private final static String TAG="MainActivity";
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button btnOpen=(Button)this.findViewById(R.id.btnOpen);
        btnOpen.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {
                //得到新打开Activity关闭后返回的数据
                //第二个参数为请求码,可以根据业务需求自己编号
                startActivityForResult(new Intent(MainActivity.this, OtherActivity.class), 1);
            }
        });
    }
    
    /**
     * 为了得到传回的数据,必须在前面的Activity中(指MainActivity类)重写onActivityResult方法
     * 
     * requestCode 请求码,即调用startActivityForResult()传递过去的值
     * resultCode 结果码,结果码用于标识返回数据来自哪个新Activity
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        String result = data.getExtras().getString("result");//得到新Activity 关闭后返回的数据
        Log.i(TAG, result);
    }
}
复制代码

当新Activity关闭后,新Activity返回的数据通过Intent进行传递,android平台会调用前面Activity 的onActivityResult()方法,把存放了返回数据的Intent作为第三个输入参数传入,在onActivityResult()方法中使用第三个输入参数可以取出新Activity返回的数据。

                    

二、使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新Activity关闭前需要向前面的Activity返回数据需要使用系统提供的setResult(int resultCode, Intent data)方法实现,调用setResult()方法后,应当调用finish()方法结束新的Activity,当新的Activity关闭后会回调旧的Activity的onActivityResult方法:

复制代码
package com.ljq.activitys;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class OtherActivity extends Activity {

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

        Button btnClose=(Button)findViewById(R.id.btnClose);
        btnClose.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {
                //数据是使用Intent返回
                Intent intent = new Intent();
                //把返回数据存入Intent
                intent.putExtra("result", "My name is linjiqin");
                //设置返回数据
                OtherActivity.this.setResult(RESULT_OK, intent);
                //关闭Activity
                OtherActivity.this.finish();
            }
        });
        
    }

}
复制代码

setResult()方法的第一个参数值可以根据业务需要自己定义,上面代码中使用到的RESULT_OK是系统Activity类定义的一个常量,值为-1,代码片断如下:
public class android.app.Activity extends ......{
  public static final int RESULT_CANCELED = 0;
  public static final int RESULT_OK = -1;
  public static final int RESULT_FIRST_USER = 1;
}

运行结果

      

说明:当点击“打开新的Activity”按钮,会跳转到“我是新打开的Activity”页面;

        当点击“关闭”按钮,关闭当前页面,同时跳转到“我是旧的Activity”页面,且会传递result参数给前一个Activity

                         

   

请求码的作用  (要知道是哪个打开的Activity)              

使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,我们需要为startActivityForResult()方法传入一个请求码(第二个参数)。请求码的值是根据业务需要由自已设定,用于标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那个按钮打开的,并且要做出相应的业务处理,这时可以这样做:
 @Override  public void onCreate(Bundle savedInstanceState) {
        ....
        button1.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {
                startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 1);

           }

        });
        button2.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {
                 startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 2);

            }

        });

                          
       @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
               switch(requestCode){
                   case 1:
                   //来自按钮1的请求,作相应业务处理
                   case 2:
                   //来自按钮2的请求,作相应业务处理
                }
          }
}
             

                    

结果码的作用(要知道是哪个)

在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。为了知道返回的数据来自于哪个新Activity,在onActivityResult()方法中可以这样做(ResultActivity和NewActivity为要打开的新Activity):
public class ResultActivity extends Activity {
       .....
       ResultActivity.this.setResult(1, intent);
       ResultActivity.this.finish();
}
public class NewActivity extends Activity {
       ......
        NewActivity.this.setResult(2, intent);
        NewActivity.this.finish();
}
public class MainActivity extends Activity { // 在该Activity会打开ResultActivity和NewActivity
       @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
               switch(resultCode){
                   case 1:
                   // ResultActivity的返回数据
                   case 2:
                    // NewActivity的返回数据
                }
          }
} 


 
Android Activity间数据回调:startActivityForResult原理与实战 在Android应用开发中,组件间通信是构建交互式应用的基础。Activity作为核心组件,其间的数据传递与回调机制是实现复杂业务流的关键。通过Intent进行数据封装与传递,结合请求码(requestCode)和结果码(resultCode)的契约模式,构成了一个清晰的异步回调模型。这一机制的技术价值在于解耦了界面跳转与结果处理,使得数据流向可控、逻辑清晰。其典型应用场景包括用户信息编辑、图片选择、权限申请后的结果回调等。本文以用户信息编辑为例,深入剖析了startActivityForResult与on 阅读详情

相关推荐

Android: 采用 startActivityForResult 实现多个Activity间不同不同跳转流程

当一个程序里面有多个Activity(例如:A1、A2、A3、A4四个Activity),正常的流程是A1->A2->A3->A4,然后再倒回来。但是为了改善用户体验,又需要能够直接A4->A1或者A2->A4等等。        在Android中有多种方法能够实现Activity之间的跳转,像往startActivity传入目标Activity的类名或者其等,虽然也能够实现想要的跳转,但是这

7201

Android 小知识:startActivity 与 finish 的调用顺序

我们经常遇到这样的场景:关闭当前 Activity 然后启动一个新 Activity,比如但我们从 Spash 开屏页跳转到 Main 的时候。 此时,代码一般会这样写: startActivity(intent) finish() 但你有没有想过如果掉换了两者顺序会是怎样? finish() startActivity(intent) 从行为上看似如没有什么变化,但实际系统处理上有细微区别,Splash 作为 Activity 栈里唯一的对象被 finish 之后,启动的新 Activity 被添加

移动端开发干货分享 3809

掌握Android Activity交互:使用StartActivityForResult

方法允许你启动一个新的 Activity,并期望从该 Activity 获取返回结果。当目标 Activity 结束时,系统会调用当前 Activity 的回调方法,携带返回结果。请求码(Request Code)是Android开发中用于标识不同Activity间通信的一个整数值。它起到一个类似于”标签”的作用,使得发起请求的Activity能够区分返回结果的来源。

weixin_34718952的博客 1115

startActivityForResult()使用说明

写在前面 实际开发中,不可避免的就是需要在Activity之间传递数据,并接收返回结果继续自己的逻辑操作.这就不得不请出如下几位:startActivity(Intent):最常用和基本的Activity跳转,本篇就忽略了. startActivityForResult(Intent, int):重点 arg1:这个Intent对象可以携带数据. arg2请求码:标识跳转的目标Activity

简单记录 2728

android开发教程之startActivityForResult使用方法

主要介绍了android开发教程之startActivityForResult使用方法,需要的朋友可以参考下

Win11系统下Notepad++右键菜单失效?3种修复方法实测有效(附注册表备份指南)

本文针对Windows 11系统中Notepad++右键菜单失效的常见问题,提供了三种经过实测有效的修复方法。核心解决方案包括使用官方NppShell.dll重新注册、手动修复注册表项以及系统级问题排查,并详细说明了操作前的注册表备份指南,确保修复过程安全可靠。

m2n3b4v5c6的博客 328

android.app.Activity类中的startActivityForResult()方法、onActivityResult()方法、setResult()方法的使用

Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用 Intent,又称为意图,是一种运行时绑定机制,它能在程序运行的过程中链接两个不同的组件(Activity、Service、BroadcastReceiver)。通过Intent,程序可以向Android表达某

到达的专栏 1874

从硬件到软件:TSMaster报文过滤全链路配置指南(含同星设备适配)

本文详细介绍了TSMaster平台下CAN/LIN/FlexRay总线的报文过滤全链路配置指南,特别针对同星TC1016等硬件的兼容性进行实战演示。从硬件层预过滤到软件层可编程过滤,提供五维过滤体系构建方法,帮助工程师提升车载诊断与总线分析效率。重点解析混合总线过滤策略优化及诊断场景下的特殊过滤方案。

tensorflowjs6的博客 401

Android中使用startActivityForResult启动活动

方法用于启动一个新的活动(Activity)并期望在该活动完成后返回结果数据给调用方。方法启动目标活动,并传递一个请求码(requestCode),用于标识这次启动请求。方法设置结果代码(resultCode)和可选的结果数据(Intent),然后调用。方法来处理需要返回结果的交互场景,从而实现更加灵活和交互性强的应用程序设计。并关闭后被调用,可以在该方法中获取返回的结果数据并进行处理。方法关闭目标活动并返回结果给调用方。方法,该方法会在目标活动调用。在Android开发中,在调用方活动中,通过调用。

微赚淘客系统开发者博客 2489

Ferromagnetic soft continuum robots

本文来自机器人领域顶刊,Science Robotics。介绍了一种铁磁软连续体机器人,主要贡献为1)介绍了一个基于磁性微粒和聚合物的软连续体机器人的制造方法,在机器人外表面涂了一层水凝胶,极大地降低了摩擦阻力;2)并研究了在磁场下,不同粒子体积分数下,此机器人的驱动性能;利用手动操控的磁铁,进行了许多实验证明该机器人性能的优异性。 铁磁软连续体机器人 Ferromagnetic soft continuum robots [1] Paper Link Authors: Kim, Yoonho, et al

XU Yangxin的博客 1372

VConsole动态加载

// 移动端真机调试工具 vconsole import VConsole from "vconsole"; import Vue from "vue"; // 动态使用VConsole if(process.env.NODE_ENV==='production'){ if(process.env.VUE_APP_BASEURL.includes('test')||process.env.VUE_APP_BASEURL.includes('pre')){ Vue.prototype

aliven1的博客 1041

Activity的数据传递(startActivityForResult , onActivityResult , setResult 的用法)

Activity的数据传递(startActivityForResult , onActivityResult , setResult 的用法)

qq_36570506的博客 1188

【华为OD机试真题 新系统】1009、企业内部门的最大层级 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 新系统】1009、企业内部门的最大层级 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战

KJ.JK 1414

android Activity 之 startActivityForResult 的使用

依次打开Activity   A1--A2--A3--A4 这时候你如果想从第四个返回到第一Activity 的时候,就用到了startActivityForResult 这个方法了。startActivityForResult(intent, requestCode)两个参数 一个是第一好的意图对象,另一个是请求代码。A1 的 intent 定义是 Intent in

轩辕之子Hui的专栏 856

RK3588平台开发系列讲解(以太网篇)MDIO底层驱动

沉淀、分享、成长,让自己和他人都能有所收获!😄。

内核笔记 6884

2018安徽省青少年信息学奥林匹克(AHOI)初中组

12 种合法的排列分别为:1, 3, 2, 4, 2, 3, 1, 4, 3, 1, 4, 2, 3, 2, 4, 1, 1, 3, 4, 2, 2, 3,4,1,1,4,2,3, 2,4,1,3, 4,1,3,2, 4,2,3,1, 1,4,3,2, 2,4,3,1。分为 2 组,一组的队员实力值是{4, 5, 2, 3},一组是{-4, -3, -5},其中最小的组人数为 3,可以发现没有比 3 更优的分法了。[0, 1, 1, 2]同样不是合法的分组方案,因为出现了两个实力值为 1 的选手。

weixin_42358969的博客 1143

android-startActivityForResult(Activity间的跳转+回调)

startActivityForResult跳转与startActivity跳转 startActivityForResult的跳转相比较于startActivity跳转多了返回原页面数据传输功能 其实就相当于两个Activity A 与 B A先跳转到B 当B再跳转到A时 在A的中调用 onActivityResult 可接收来自B页面的传递信息 相对于startActivity常用于跳转至 **系统相机** 然后 返回照片的绝对路径 //跳转 其中i为标记 当返回时使用(想来是避免当代码中

qq_41550458的博客 870

基于MATLAB开发AUTOSAR软件应用层模块-part2.建立一个AUTOSAR的模型,并生成autosar格式代码

上一篇我们建立了一个空模型,这篇我们接着上篇文章,建立一个简单的模型 点击 Library Browser,打开simulink模块库,见下图 左侧是模块库的列表,右侧是每个模块库里包含的具体的模块。 点击通用模块库,里边是一些常见的模块, 我们选取里边的3个模块,分别是输入,输出和增益三个模块,右键点击模块,选择add block to model xx,可以把模块添加到模型中。 然后练好连线 一个简单的模型就搭建好了,之后我们修改配置,将模型修改为AUT...

汽车软件开发 3302

android activity之间跳转 setResult 和 StartActivityForResult

startActivityForResult与startActivity的不同之处在于: 1、startActivity( )  仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( )。 2、startActivityForResult( )  可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activ

Hackill 曰:敏而好学 不耻下问 1945

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android Activity.startActivityForResult的详细用法

前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          优快云:http://www.youkuaiyun.com          雨季o莫忧离:http://blog.youkuaiyun.com/luckkof 正文   在启动另外一个Activity的时候,有两种方法,一种是直接使用startActiv

奥特曼 1444

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

android返回上一个activity 且数据被带回,Android利用startActivityForResult返回数据到前一个Activity...

在Android里面,从一个Activity跳转到另一个Activity、再返回,前一个Activity默认是能够保存数据和状态的。但这次我想通过利用startActivityForResult达到相同的目的,虽然看起来变复杂了,但可以探索下startActivityForResult背后的原理和使用注意事项。要实现的功能如下:从Activity A将数据传到Activity B,再从Activi...

weixin_42515842的博客 2209

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【Android-Activity】startActivityForResult()的使用

一般来说,在进行设置界面跳转的时候,都需要一个intent,然后通过startActivity(intent)来达到效果。 本文主要介绍startActivityForResult()的使用方法及使用情景: 使用场景:通常用于带数据返回页面的情况 效果: 使用方法: 1、设置startActivityForResult()方法,此处的code只是为了标识不同的跳转 startActivityFor...

qq_40716430的博客 1101

android 利用startActivityForResult()方法得到另一个Activity的返回值

第一个Activity package yyy.testandroid5; import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.os.Bundle; import android.view.View; imp

Central-Perk的专栏 1万+

【startActivityForResult】Android Activity回传数据

Android用Intent来做activity的跳转,轻量级的数据用Bundle配合着传递。 传回数据用startActivityForResult来搞。 跳转时代码: _Intent=newIntent(); _Intent.setClass(getBaseContext(), Appearance.class); startActivityForResult(_Inte

天。朝程序猿的专栏 867

android中Activity的启动方法之startActivityForResult 参数解释

Activity有两种启动的方法,一种是startActivity,不带返回参数;另一种是startActivityForResult,带返回参数。

fableyjg的专栏 1420

android Activity android:launchMode="singleInstance" 与 startActivityForResult

先记录一下现象,还不晓得原因: 有一个Activity,叫A,在这个Activity种请求其他页面叫做BActivity里的内容,所有发了个Intent: startActivityForResult 已经调好的程序,后来在不经意间,把A设置了个单实例android:launchMode="singleInstance" 之后 startActivityForResult就再也不好用了。

HappyDelano的专栏 1706
上一篇: Android中图片缩放9path图片的使用
下一篇: BroadCastReceiver 简介
ProbuINg
博客等级 码龄14年 10粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值