`
he91_com
  • 浏览: 370562 次
文章分类
社区版块
存档分类
最新评论

startActivityForResult启动另一个Activity并返回结果

 
阅读更多
startActivity可启动另一个Activity,用Intent传递数据,但不能返回数据。
用startActivityForResultIntent intent, Int requestCode),可启动另一个Activity并返回所需结果。


/*****************************/ 华丽丽的分割线/*****************************/

目的: A.java 是主界面,B.java 是子功能模块,要从A启动B,B干完活之后把结果汇报给A
先看 A.java 的相关代码

//--A.java--//
/*
* 要做两件事情,第一是用startActivityForResult() 启动B,其次是回收B的结果
*/
//启动B
Intent bintent = new Intent(A.this, B.class);
//设置 bintent的Bundle的一个值
String bsay = "Hello, this is B speaking";
bintent.putExtra("listenB", bsay)
startActivityForResult(bintent,0); // 参数(Intent intent, Int requestCode) 的 requestCode 对应下面回收Bundle时识别用的

//重写onActivityResult()来处理返回的数据,建议先看B.java 的代码再回来看这里比较好理解
//这理有三个参数 requestCode, resultCode, data
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (resultCode) { //resultCode为回传的标记,我在B中回传的是RESULT_OK
case RESULT_OK:
Bundle b=data.getExtras(); //data为B中回传的Intent
String str=b.getString("ListenB");//str即为回传的值"Hello, this is B speaking"
/* 得到B回传的数据后做什么... 略 */
break;
default:
break;
}
}

-------------------------------------------------------------------------------------
//-- B.java--//
// 用setResut() 准备好要回传的数据后,只要使用finish()的方法就能把打包好的数据发给A且运行onActivityResult()部分的代码

Intent aintent =new Intent(B.this, A.class);
/* 将数据打包到aintent Bundle 的过程略 */
setResut(RESULT_OK,aintent); //这理有2个参数(int resultCode, Intent intent)
... ...
finish();

/**我在另外一本书中看到的代码是这样的:
Intent aintent = getIntent();
B.this.SetResult(0,aintent);
B.this.finish();
**/


-------------------------------------------------------------------------------------
OK,代码如上,可能这个时候还会有点疑问,关于参数的疑问。直接看android sdk 帮助说得更清楚。我发现网上有些文章还有吧 requestCode 和 resultCode 混淆说明错的。
startActivityForResult(Intent intent, Int requestCode)
intent 传给B的,不解释,看不懂你还是玩玩手机算了,别想开发的事情了
requestCode >=0就好,随便用于在onActivityResult()区别哪个子模块回传的数据,如果还有C.java ,D甚至E子模块的话,每个区分开不同的requestCode就好。

setResut(int resultCode, Intent intent)
resultCode 如果B子模块可能有几种不同的结果返回,可以用这个参数予以识别区分。这里还有个特殊的 RESULT_OK 值,没有特殊情况用它就好了,sdk有说明的,呵。
intent 继续不解释,传回给A的onActivityResult()

onActivityResult(int requestCode, int resultCode, Intent intent)
这里三个都不用解释了,与上文对应的东西。如果不对requestCode和resultCode 加以识别区分的话,只要有其他activity setResult到了A onActivityResult()会无差别处理。

注意两个Code的区别,有多个子模块、多种返回结果时,要分开处理。

分享到:
评论

相关推荐

    Android 从Activity中返回数据

    而且要从Activity中返回数据,虽然返回数据和传递数据类似,也可以采用前面4种方法,但是一般建议采用Intent对象的方式来返回数据,使用这种方式返回数据,需要使用startActivityForResult方法来显示Activity ...

    Activity实例详解之启动activity并返回结果

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

    Activity跳转

    然后返回到原来的Activity,比如activity是一个通讯录列表,我们通过一个增加按钮打开另一个activity让用户输入新的联系人,输入后再返回通讯录列表。 这个时候,我们可以通过startActivityForResult(Intent, int)...

    Android组件之间交互核心Intent用法分析

    本文实例讲述了Android组件之间交互核心Intent用法。分享给大家供大家参考,具体如下: ...第二种:启动另一个Activity并返回结果 作用:当从第二个Activity回跳到前一个Activity的时候,就不再需要使用startAc

    Android Intent和Intent Filter详解

    使用 Activity.setResult(), 传入一个intent来从activity中返回结果.  将intent对象传给Context.startService()来启动一个service或者传消息给一个运行的service. 将intent对象传给 Context.bindService()来绑定...

    安卓应用之Activity数据传递

    使用startActivityForResult和onActivityResult的方法来启动Activity,发送数据以及接收数据返回。 使用onActivityResult中的形参,实现标准的处理流程。 代码中Tag,RequestCode,ResultCode能标记性数值,需要在...

    Android基础之startActivityForResult()的用法详解

    安卓开发中一个很基础的操作就是打开一个 Activity ,另一个很必要的操作就是,打开一个 Activity ,在打开的 Activity 中操作之后并获得返回结果。 两个 Activity 为了演示这个操作,我们需要两个 Activity : ...

    Android中进程之间通信的机制

    总结:跨进程访问Activity(访问其他应用程序中的Activity)主要是通过一个Action来完成的,如果要传递数据,还需要...如果要想从调用的Activity中返回数据,就需要使用startActivityForResult方法来启动Activity了。

    Android使用Intent实现页面跳转

    什么是Intent Intent可以理解为信使(意图) 由Intent来协助完成Android各个组件之间的通讯 Intent实现页面之间的跳转 ...第二种启动方式可以返回结果 代码 FirstActivity.java public class FirstActiv

    快速解决fragment中onActivityResult不调用的问题

    fragment 通过startActivityForResult方法启动另一个activity,返回时,不调用onActivityResult方法, 解决步骤: 1. 在Fragment所属的Activity中,重写了onActivityResult方法,确保加上super.onActivityResult ...

    MySphero:一款结合了妙臂章和 Sphero 球的 Android 应用程序

    用户界面示例启动活动大多数 Sphero 应用... 这将使用 Intent 启动 StartupActivity,并设置一个活动结果标识符。 STARTUP_ACTIVITY常量在 StartupActivity 完成后在onActivityResult()方法中返回,如下面的代码所示。

    Android使用Intent隐式实现页面跳转

    通过查阅文档你会发现Activity中还有一个startActivityForResult()方法也是用于启动活动的,但是这个方法期望在活动销毁的时候能返回一个结果给上一个活动,毫无疑问这就是我们所要达到的效果. startActivityForResult...

    包含拍照截图修图的安卓程序

    //拍完照startActivityForResult() 结果返回onActivityResult()函数 } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(request...

    EasyCameraExt:自定义相机,拍照后获得图片所在sd卡路径(sdcardAndroiddata包名filesPictures时间戳.jpg)

    (2) 获取拍照结果(目前仅返回照片在sd卡上的目录, /sdcard/Android/data/包名/files/Pictures/时间戳.jpg):protected void onActivityResult(int requestCode, int resultCode, Intent data) {super....

    安卓记事本

    // 每一个intent都会带一个Bundle型的extras数据。 Bundle extras = getIntent().getExtras(); if (extras != null) { String title = extras.getString(SecondAtivity.KEY_TITLE); String body = ...

Global site tag (gtag.js) - Google Analytics