转发自: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. 修改 ulimit 时 需要注意的问题

  2. SpringBoot(十五):SpringBoot2.x集成eureka实现注高可用册中心,高可用的服务器提供者,以及消费者示例

    本文代码请参考<https://github.com/478632418/springcloud-eureka-server-client/tree/master/mall>.<ht ...

  3. 解决在SQLPLUS中无法使用方向键、退格键问题

    1. wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/matthewdva:/build:/E ...

  4. JDBC连接抽象方法的使用例子

    package com.zdlt.auth.api.base.datasource; import java.sql.*; import java.util.ArrayList; import jav ...

  5. Python - Django - form 组件动态从数据库取 choices 数据

    app01/models.py: from django.db import models class UserInfo(models.Model): username = models.CharFi ...

  6. laydate.render报错:日期格式不合法

    在使用laydate渲染日期时: laydate.render({ elem: '#day' }); 提示日期格式不合法 需要使用 too.dateType()来包装 <input type=& ...

  7. ETF:pcf文件制作

    pcf文件依赖数据: ETF基本信息() 指数权重文件(次日权重文件,中证指数公司) 现金替代标志文件(根据中证指数的停复牌文件) 净值文件(基金公司估值系统计算) 成分股数量计算公式: 1.估值系统 ...

  8. Spring的@Autowired和@Resource注入

    @Autowired的原理 Spring@Autowired注解与自动装配 @Autowired 与@Resource的区别(详细) spring不但支持自己定义的@Autowired注解,还支持几个 ...

  9. kubernetes-dashboard获取令牌登陆

    前言:kubernetes核心组件服务启动正常 一.在kubernetes-dashboard.yaml父级文件夹下创建account.yaml文件用于访问kubernetes-dashboard,添 ...

  10. rxjs debounceTime减少搜索的频率

    debounceTime用来降低事件的触发频率 ,接收以毫秒为单位的参数 它所做的操作是,在一定时间范围内不管产生了多少事件,它只放第一个过去,剩下的都将舍弃 html: <div class= ...