转发自:https://blog.csdn.net/hacker_crazy/article/details/78345450

在进行界面间的跳转和传递数据的时候,我们有的时候要获得跳转之后界面传递回来的状态,数据等信息。这个时候,我们不一定需要使用Intent进行跳转回原先设置的界面,而是使用onActivityResult方法就可以解决这个问题。

原理如图:

我们这里假设有A、B两个Activity,由A跳转到B,然后B返回到A。

在这一过程中,我们在A启动B的过程中调用startActivityForResult()方法来启动B,

然后在B中调用Context.setResult()方法来传递返回的Code,

并在A中的onActivityResult()方法中解析返回的结果,并做相应的逻辑操作。

对几个方法的解释:

1.startActivityForResult(Intent Intent, int requestCode):

该方法要在onCreate中调用,传递的参数有两个,一个是Intent,intent中可以携带传递的数据;另一个是int型的请求码Code,请求码可以自己定义。

请求码的作用:为了区分启动不同的Intent,或者传递不同的数据使用,作为一种不同启动的标识。比如A有两个Button都要启动B,为了区分是哪个Button启动的B,我们就要设置两个不同的请求码来区分。

这个方法是启动B的启动方法,调用之后会跳转到界面B,并传递相应的数值。同时,对于具体Intent传递的数值,可以使用接下来讲解的onActivityResult()方法来传递,这样启动方法和数据操作方法分开写,会更好。

2.B中的setResult方法。

setResult()方法有两个,一个是只含有int型参数ResultCode,另一个是可以传递Intent的,分别为,如图:

使用方法就是获取当前Activity作为对象,并调用该方法,然后再执行finish()方法,结束当前界面就可以。

当调用setResult方法之后,A界面就已经收到了发送的数据。

3.onActivityResult()方法的使用:

参数类型如图:

三个参数分别为int型 requestCode, int型 resultCode,  Intent型 data。

第一个是请求码,可以进行传递数据前的一些操作,比如根据不同的请求码,设置不同的传递内容。

第二个是返回码,也就是在B中设置的int的数值,这个是得到返回的内容的标识。

第三个是Intent的数据,比如在B中的setResult方法中传递了一些数据,在A中就可以通过解析Intent的内容来获得传递过来的数据。

对于具体的写法,可以按照下图的方式构造:

————————————————
版权声明:本文为CSDN博主「hacker_crazy」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hacker_crazy/article/details/78345450

onActivityResult方法的使用的更多相关文章

  1. Android Activity的加载模式和onActivityResult方法之间的冲突

    前言 今天在调试程序时,发现在某一Activity上点击返回键会调用该Activity的onActivityResult()方法.我一开始用log,后来用断点跟踪调试半天,还是百思不得其解.因为之前其 ...

  2. 【转】关于onActivityResult方法不执行的问题汇总

    首先说说本人碰到的于onActivityResult不执行的情况.(网上找了很久都没有人碰到) 1.直接上代码说明 ActivityA的代码:(放在onCreate方法中) Intent intent ...

  3. [转]Android Activity的加载模式和onActivityResult方法之间的冲突

    前言 今天在调试程序时,发现在某一Activity上点击返回键会调用该Activity的onActivityResult()方法.我一开始用log,后来用断点跟踪调试半天,还是百思不得其解.因为之前其 ...

  4. Android踩坑随笔Fragment中onActivityResult方法不被调用

    最近项目里要做头像功能,参考了这篇博客(GitHub - zhudfly/SelectAvatarApplication: 一个选择并显示头像圆形控件,可以通过拍照或者选择相册中的图片来设置图片),但 ...

  5. DialogFragment 将数据传回Activity的onActivityResult方法

    在MyActivity中 弹出一个DialogFragment (某一个控件的点击事件) search= findViewById(R.id.search); search.setOnClickLis ...

  6. 解决不走onActivityResult方法

    最近在开发公司项目,在使用startActivityForResult关联俩个Activity中,发现A跳转到B,B设置setResult之后,A没有执行onActivityResult,查找一下,发 ...

  7. 我的Android进阶之旅------>Android Activity的singleTask加载模式和onActivityResult方法之间的冲突

    今天调试一个bug的时候,情景如下: 一个Activity A,需要用startActivityForResult方法开启Activity B.Activity B的launch mode被设置为si ...

  8. 关于onActivityResult方法不执行的问题汇总

    我们不生产代码, 只是大自然的搬运工.  首先致谢: https://blog.csdn.net/sbvfhp/article/details/26858441 场景描述: 在A activity(由 ...

  9. onActivityResult方法不执行,什么原因?

    原因: public void OnOpenPlayersActivity(View view) {  Intent intent = new Intent();  intent.setClass(g ...

随机推荐

  1. 如何完美更换WordPress网站的域名

    前几天,一位WordPress王牌主机的用户问我,他的WordPress网站已经建立一年多了,现在想要修改网站使用的域名,该如何操作?这是WordPress用户经常遇到的问题.今天我们来给大家介绍一下 ...

  2. android细节之android.intent.category.DEFAULT的使用

    我们知道,实现android的Activity之间相互跳转需要用到Intent, Intent又分为显式Intent和隐式Intent, 显式Intent很简单,比如我在FirstActivity中想 ...

  3. jstl标签库使用报错index_jsp.java找不到问题

    初学jstl的时候记得只需要讲jstl和standard的jar放在lib下面,然后jsp中使用对应导入语法就可以使用标签库了. 但那时候用的是myeclipes,myeclipes的导包的过程记得是 ...

  4. vue 动态路由跳转在新窗口打开

    let routeUrl =this.$router.resolve({path: '/home'}) window.open(routeUrl.href, '_blank');

  5. 【转】Python查找某文件夹下的所有excel文件

    # -*- coding: utf-8 -*- # author:baoshan import os dirname = r'D:\0.shenma\01.聊城资料\01.数据资料\02.聊城年鉴数据 ...

  6. java多线程(一)创建线程的四种方式

    1.   什么是并发与并行 要想学习多线程,必须先理解什么是并发与并行 并行:指两个或多个事件在同一时刻发生(同时发生). 并发:指两个或多个事件在同一个时间段内发生. 2.   什么是进程.线程 进 ...

  7. Anaconda(三)

    五.TensorFlow安装 这一天由于版本问题走了太多弯路.之前用的conda版本是最新的,自带Python3.7.5,装了之后倒是各种包都能装,用命令: pip install xxx conda ...

  8. Data Flow ORB-SLAM for Real-Time Performance on Embedded GPU Boards

    张宁 Data Flow ORB-SLAM for Real-Time Performance on Embedded GPU Boards 数据流ORB-SLAM可在嵌入式GPU板上实现实时性能链接 ...

  9. 123456123456----updateV#%#6%#%---pinLv###1%%%----com.zzj.CarCleanGame567---前show后广--儿童洗车-222222

    com.zzj.CarCleanGame567---前拼show后广--儿童洗车-

  10. delimiter关键字

    默认的sql语句以分号";"表示结束.mysql解释器每遇到一个分号,执行一段语句.可以通过delimiter更改语句结束符 mysql>delimiter &&am ...