startActivityForResult与startActivity的不同之处

startActivity( )

仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( )。

startActivityForResult( )

可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activity调用了finish()方法以后,程序会自动跳转回T1Activity,并调用前一个T1Activity中的onActivityResult( )方法。

Code

跳转的时候不是采用startActivity(intent) 这个方法,而是startActivityForResult(intent, 0)

Intent intent=new Intent();
intent.setClass(A.this, B.class);
Bundle bundle=new Bundle();
String str1="aaaaaa";
bundle.putString("str1", str1);
intent.putExtras(bundle);
startActivityForResult(intent, 0);//这里采用startActivityForResult来做跳转,此处的0为一个依据,可以写其他的值,但一定要>=0

重写onActivityResult方法,用来接收B回传的数据。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (resultCode) { //resultCode为回传的标记,我在B中回传的是RESULT_OKcase RESULT_OK:Bundle b=data.getExtras(); //data为B中回传的IntentString str=b.getString("str1");//str即为回传的值break;
default:break;}
}

在B中回传数据时采用setResult方法,并且之后要调用finish方法。

setResult(RESULT_OK, intent); //intent为A传来的带有Bundle的intent,当然也可以自己定义新的Bundle
finish();//此处一定要调用finish()方法

setResult()

如果在startActivityForResult起来的Activity里面设置setResult,结果并不会马上返回给parent的Activity,只有当前Activity被finish,结果才会被发送给parent的onActivityResult去处理!

public final void setResult(int resultCode, Intent data) {synchronized (this) {mResultCode = resultCode;mResultData = data;}}public void finish() {if (mParent == null) {int resultCode;Intent resultData;synchronized (this) {resultCode = mResultCode;resultData = mResultData;}if (Config.LOGV) Log.v(TAG, "Finishing self: token=" + mToken);try {if (ActivityManagerNative.getDefault().finishActivity(mToken, resultCode, resultData)) {mFinished = true;}} catch (RemoteException e) {// Empty
            }} else {mParent.finishFromChild(this);}}

这段代码可以看出activity返回result是在被finish的时候,也就是说调用setResult()方法必须在finish()之前。那么如果在如下方法中调用setResult()也有可能不会返回成功: onPause(), onStop(), onDestroy(),
因为这些方法调用不一定是在finish之前的,当然在onCreate()就调用setResult肯定是在finish之前的

按BACK键从一个Activity退出来的,一按BACK,android就会自动调用Activity的finish()方法,然后设置resultCode为RESULT_CANCELED,也就不会返回任何数据了 .
解决方法就是在Activity里面捕获按BACK的事件,捕获到之后先setResult,然后自己来调用finish,就搞定了……把BACK事件直接自己给吞了

@Overridepublic void onBackPressed() {Log.i(TAG, "onBackPressed");setResult(Const.LIVE_OK);super.onBackPressed();}

我是天王盖地虎的分割线

参考:http://www.cnblogs.com/lijunamneg/archive/2013/02/05/2892616.html

Android -- startActivityForResult和setResult相关推荐

  1. startActivityForResult和setResult详解

    startActivityForResult和setResult详解 原文:startActivityForResult和setResult详解 startActivityForResult与star ...

  2. Android startActivityForResult()的用法

    领导说我基础差,我也没反驳,知识忘记了,用到的时候查一下不久行了吗,自己最近在回顾知识 好好的在补充一下,今天礼拜日,趁着空闲事件记录一下简单的知识 startActivityForResult() ...

  3. Android startActivityForResult的使用

    在Android中startActivityForResult主要作用就是: A-Activity需要在B-Activtiy中执行一些数据操作,而B-Activity又要将,执行操作数据的结果返回给A ...

  4. Android应用开发—setResult()的调用时机

    本文转载自setResult()的调用时机,此处做了重新的排版,只是感觉markdown的排版比较好看些,侵删. 今天遇到这样一个问题,我在Activity-A中用startActivityForRe ...

  5. startActivityForResult、setResult、onActivityResult用法精炼详解

    一.前期基础知识储备 (1)ActivityManger管理Activity启动 startActivity(Intent intent),启动一个Activity最简单的方式.我们可能会以为star ...

  6. Android startActivityForResult

    为什么80%的码农都做不了架构师?>>>    startActivityForResult(intent,CODE_A);//>=0    public static fin ...

  7. startActivityForResult()

    在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,还同时返回一些子模块完成的数据交给主Activity处理. 用startA ...

  8. 一个调用其他activity的完整例子,使用了 onActivityResult和startActivityForResult

    https://blog.csdn.net/qq_32521313/article/details/52451364 Android startActivityForResult基本用法 2016年0 ...

  9. setResult详解

    startActivityForResult与startActivity的不同之处在于: 1.startActivity( )  仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startA ...

最新文章

  1. 程序员的自我修养--链接、装载与库笔记:静态链接
  2. 10款人气暴涨的PHP开源工具
  3. ASP.NET Core 框架源码地址
  4. OpenCV兼容性测试的实例(附完整代码)
  5. 视频翻录_将DVD解密并复制到硬盘驱动器而无需翻录
  6. NTFS文件系统的简述
  7. C#中泛型类型约束条件
  8. 制作.bat文件快速启动Mongo服务
  9. debian mysql目录_debian Squeeze配置apache php mysql环境,debian中apache目录结
  10. 计算机科学导论的学习
  11. seetaface6教程:封装人脸识别,人脸检测,,眼睛检测,状态,特征.....
  12. html5 打开支付宝app,支付宝H5唤醒APP
  13. 离散数学实验一 利用真值表法求取主析取范式以及主合取范式的实现
  14. 2021电赛F题智能送药小车程序代码
  15. torch.optim优化算法理解之optim.Adam()
  16. 天尚网最新单机游戏下载,直接下载哦!
  17. FreeRTOS内存不够
  18. 企业云化应用(SaaS)是未来绝对的趋势
  19. 01-邂逅React开发
  20. 设计水花飞溅柠檬汽水饮料广告的PS教程

热门文章

  1. java C# objective-c AES对称加解密
  2. Storm入门(三)HelloWorld示例
  3. 多线程条件通行工具——Semaphore
  4. HDU 4893 Wow! Such Sequence!(2014年多校联合 第三场 G)(线段树)
  5. PHP 登录DEMO
  6. sql 嵌套while需要注意的问题
  7. Python学习笔记之变量
  8. Android之使用ThumbnailUtils类来获取视频第一帧缩略图
  9. Struts2中Action的属性接收参数
  10. windows下consul安装启动