`
elvajxw
  • 浏览: 107046 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Android startActivityForResult()和onActivityResult()的用法

阅读更多

引用:http://hi.baidu.com/winnyang/blog/item/25feb64ecf370ac4d0c86a48.html

目的: 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();
-------------------------------------------------------------------------------------
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()会无差别处理。
分享到:
评论

相关推荐

    Android onActivityResult和setResult方法详解及使用

    Android onActivityResult和setResult方法  最近做公司项目遇到Android onActivityResult和setResult ,在应用过程中进程报错,这里有必要记录下,以免再次使用出错。 如果你想在Activity中得到新打开Activity关闭...

    安卓应用之Activity数据传递

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

    Android中Fragment多层嵌套时onActivityResult无法正确回调问题的解决方法

    Fragment也可以使用startActivityForResult方法去打开一个Activity,然后在其onActivityResult方法中处理结果,可是当Fragment嵌套的时候,由于FragmentActivity的BUG导致只会回调最外那层Fragment的...

    Android 从Activity中返回数据

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

    实验四-Android基本组件交互实验.doc

    startActivityForResult ——跳转到下一个Activity,而当这个Activity被关闭以后,自动跳转前一个Activity ,并调用onActivityResult( )方法,参数为Intent和requestcode 2. Intent Android基本的设计理念是鼓励...

    Android开发资料合集--续

    2、利用startActivityForResult与onActivityResult方法 16 11、使程序完全退出 18 12、列出所有音乐文件 18 13、使用Intent ACTION 调用系统程序 19 显示网页: 19 显示地图: 19 路径规划: 19 拨打电话: 19 发送 SMS/...

    Android使用Fragment打造万能页面切换框架

    如果需要activity返回结果,则调用startActivityForResult方法,在onActivityResult方法中获得返回结果。此外,每一个要展示的activity需要在AndroidManifest.xml文件中注册。而且,如果在某些特定的情况下(比如...

    Android 二维码扫描

    注意若使用paint.setShader(Shader shader) 方法,一定要在绘制完成后调用paint.setShader(null)。以免绘制信息出错。 * * 8、 CameraConfigurationManager 修改横竖屏、处理变形效果的核心类。 * 9、 ...

    Android6.0权限问题解决

    ● 支持批量权限申请,不需要重写 onRequestPermissionsResult 方法,Activity 与 Fragment 中用法一致,一句话搞定。 ● 处理权限拒绝,或勾选不再询问,导致不能正常使用功能的提示框,支持跳转设置权限界面开启...

    Android调用相机并将照片存储到sd卡上实现方法

    Android中实现拍照有两种方法,一种是调用系统自带的相机,然后使用其返回的照片数据。 还有一种是自己用Camera类和其他相关类实现相机功能,这种方法定制度比较高,洗染也比较复杂,一般平常的应用只需使用第一种...

    安卓zxing 代码demo

    5.在Activity的onActivityResult方法中接收扫描结果(下面有完整代码) protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 5) { if (null != data) { Bundle ...

    Android中通过访问本地相册或者相机设置用户头像实例

    (1)通过startActivityForResult方法,分别传递调用系统相册的Intent和调用相机拍照的Intent来做选择 (2)调用Android系统中自带的图片剪裁,实现图片的剪裁并在onActivityResult方法中获取数据。 本次演示效果...

    Android 系统相机拍照后相片无法在相册中显示解决办法

    目前自己使用发送广播实现了效果  public void photo() { Intent openCameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(openCameraIntent, TAKE_PICTURE...

    Android中你可能不知道的Fragment妙用

    本文主要给大家介绍了关于Android中你可能不知道的Fragment妙用的相关内容,分享出来供大家参考学习,下面来一起看看吧。... 在当前Activity或者fragment的OnActivityResult中根据RequestCode和Resu

    高仿微信界面

    顶部和底部include的顶部栏和底部栏后面再说。 MainActivity的界面activity_main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

    InlineActivityResult:在带有InlineActivityResult的startActivityForResult之后直接接收活动结果

    无需使用该库覆盖Activity或Fragment onActivityResult(code, permissions, result) ,只需执行InlineActivityResult的方法即可。这不会减少代码流 支持 一般用法(跨语言) dependencies { implementation ' ...

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

    用户界面示例启动活动大多数 Sphero 应用程序都使用 StartupActivity 连接到机器人。 然而,这个最新版本的 ... STARTUP_ACTIVITY常量在 StartupActivity 完成后在onActivityResult()方法中返回,如下面的代码所示。

    内联接收活动结果,没有任何样板。 可选的协程和RxJava支持。-Android开发

    内联活动结果目录核心Gradle依赖关系用法协程Gradle依赖关系用法RxJava Gradle依赖关系用法Corxines Gradle依赖关系用法RxJava Gradle依赖关系用法Core Gradle依赖关系依赖关系... ...实现'...

    TutorialView-水波纹效果的activity弹出.zip

     if (startTutorialForResult)//带返回结果的,你需要重写onActivityResult(int requestCode, int resultCode, Intent data)  startActivityForResult(builder.getIntent(), TUTORIAL_REQUEST);  else ...

Global site tag (gtag.js) - Google Analytics