Android -- startActivityForResult和setResult
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相关推荐
- startActivityForResult和setResult详解
startActivityForResult和setResult详解 原文:startActivityForResult和setResult详解 startActivityForResult与star ...
- Android startActivityForResult()的用法
领导说我基础差,我也没反驳,知识忘记了,用到的时候查一下不久行了吗,自己最近在回顾知识 好好的在补充一下,今天礼拜日,趁着空闲事件记录一下简单的知识 startActivityForResult() ...
- Android startActivityForResult的使用
在Android中startActivityForResult主要作用就是: A-Activity需要在B-Activtiy中执行一些数据操作,而B-Activity又要将,执行操作数据的结果返回给A ...
- Android应用开发—setResult()的调用时机
本文转载自setResult()的调用时机,此处做了重新的排版,只是感觉markdown的排版比较好看些,侵删. 今天遇到这样一个问题,我在Activity-A中用startActivityForRe ...
- startActivityForResult、setResult、onActivityResult用法精炼详解
一.前期基础知识储备 (1)ActivityManger管理Activity启动 startActivity(Intent intent),启动一个Activity最简单的方式.我们可能会以为star ...
- Android startActivityForResult
为什么80%的码农都做不了架构师?>>> startActivityForResult(intent,CODE_A);//>=0 public static fin ...
- startActivityForResult()
在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,还同时返回一些子模块完成的数据交给主Activity处理. 用startA ...
- 一个调用其他activity的完整例子,使用了 onActivityResult和startActivityForResult
https://blog.csdn.net/qq_32521313/article/details/52451364 Android startActivityForResult基本用法 2016年0 ...
- setResult详解
startActivityForResult与startActivity的不同之处在于: 1.startActivity( ) 仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startA ...
最新文章
- 程序员的自我修养--链接、装载与库笔记:静态链接
- 10款人气暴涨的PHP开源工具
- ASP.NET Core 框架源码地址
- OpenCV兼容性测试的实例(附完整代码)
- 视频翻录_将DVD解密并复制到硬盘驱动器而无需翻录
- NTFS文件系统的简述
- C#中泛型类型约束条件
- 制作.bat文件快速启动Mongo服务
- debian mysql目录_debian Squeeze配置apache php mysql环境,debian中apache目录结
- 计算机科学导论的学习
- seetaface6教程:封装人脸识别,人脸检测,,眼睛检测,状态,特征.....
- html5 打开支付宝app,支付宝H5唤醒APP
- 离散数学实验一 利用真值表法求取主析取范式以及主合取范式的实现
- 2021电赛F题智能送药小车程序代码
- torch.optim优化算法理解之optim.Adam()
- 天尚网最新单机游戏下载,直接下载哦!
- FreeRTOS内存不够
- 企业云化应用(SaaS)是未来绝对的趋势
- 01-邂逅React开发
- 设计水花飞溅柠檬汽水饮料广告的PS教程