`

Android学习 之 startActivityForResult 和 onActivityResult

阅读更多

在交互实现的过程里,发现之前自己对Activity生命周期和Intent 传递数据的Bundle理解有些偏差。


举例说我想要做的一个事情是,在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主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();

-------------------------------------------------------------------------------------
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】的startActivityForResult

    在Android应用开发中,`startActivityForResult`是一个关键方法,用于在两个Activity之间进行交互,尤其是在需要从一个Activity启动另一个Activity并期待返回结果时。这个方法允许开发者在启动新的Activity时传递...

    Android中onActivityResult的用法

    Android 中 onActivityResult 的用法 Android 中的 onActivityResult 是一个非常重要的回调函数,它允许活动之间进行数据交互。下面我们将详细介绍 onActivityResult 的用法和实现原理。 一、什么是 ...

    Android-一种startActivityForResult更简单流程

    在Android应用开发中,`startActivityForResult()`是一个关键方法,用于在不同的Activity之间进行通信,尤其是在需要从一个Activity...在实际开发中,不断探索和学习这些最佳实践,将有助于提升开发效率和应用质量。

    Android-基于RxPermissions框架思想在使用startActivityForResult可以不重写onActivityResult回调

    在Android开发中,`startActivityForResult`方法是用于启动一个新的Activity并等待其返回结果的关键机制。通常情况下,当从子Activity返回时,我们需要重写`onActivityResult`回调来处理返回的数据。然而,随着...

    Android onActivityResult和setResult方法详解及使用

    在Android应用程序开发中,`onActivityResult()` 和 `setResult()` 方法是两个非常关键的组件,它们用于在不同的Activity之间传递数据和控制流程。当我们需要从一个Activity启动另一个Activity并期待返回结果时,这...

    Android之Intent通过startActivityForResult方法启动新Activity

    在Android应用开发中,`startActivityForResult()`是一个常用且重要的功能,熟练掌握其使用能有效提高用户体验和应用的可维护性。在实际项目中,结合具体的业务场景灵活运用,可以使应用的交互更加顺畅。

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

    在Android应用开发中,`startActivityForResult()`是一个关键方法,用于在一个Activity启动另一个Activity并在完成特定操作后返回结果。此方法常用于实现如选择图片、输入数据等需要用户交互并返回结果的情景。本文...

    Android巧用Fragment解耦onActivityResult详解

    在Android开发中,`onActivityResult()` 是一个关键的方法,它用于处理从子Activity返回的结果。然而,当涉及到多个Fragment交互时,尤其是需要处理`startActivityForResult()` 的回调,`onActivityResult()` 往往会...

    Android学习之路——4.Activity简介

    总之,这篇博客"Android学习之路——4.Activity简介"将为初学者提供Activity的基础知识和实践经验,帮助他们构建Android应用的核心部分。对于想要深入Android开发的人来说,理解并熟练运用Activity至关重要。

    告别onActivityResult 工具类DEMO

    本DEMO就是针对这一变化,提供了一种告别传统`onActivityResult`的解决方案,采用代理模式来实现对`startActivityForResult`结果的获取和权限检查管理。 首先,了解代理模式。代理模式是一种设计模式,它为一个对象...

    OnActivityResult

    然而,由于Android的更新和设计模式的变化,`ActivityGroup`现在已被废弃,取而代之的是Fragment和FragmentTransaction的使用。尽管如此,理解`ActivityGroup`及其遇到的问题仍然对处理遗留代码或理解历史项目有帮助...

    StartActivityForResult

    `StartActivityForResult`是Android开发中的重要组件交互方式,它使得不同Activity间能有效地传递数据和处理业务逻辑。熟练掌握`StartActivityForResult`的使用,对于提升应用的用户体验和功能完整性至关重要。在...

    Android OnActivityResultDemo

    这个结果码必须为RESULT_OK,因为Activity A的onActivityResult()会依次判断结果码和请求码,只有都符合的时候,OK,我们可以从onActivityResult()的参数Intent data中获取数据啦,这个data就是Activity B中的Intent...

    android之activity的生命周期和launchMode、onActivityResult方法的作用

    总结来说,理解Activity的生命周期、熟练运用launchMode以及正确使用onActivityResult方法,对于编写稳定、高效、用户体验良好的Android应用至关重要。通过实际的代码测试和实验,开发者可以更好地掌握这些核心概念...

    startActivityForResult的详细用法

    总的来说,`startActivityForResult`是Android应用中实现Activity间数据交换的关键机制,理解和熟练使用它对于开发复杂的Android应用至关重要。通过这种方式,我们可以灵活地在不同的Activity之间传递信息,实现用户...

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

    为了解决这个问题,我们需要深入分析源码,了解Android系统是如何处理startActivityForResult和onActivityResult的。以support-v4库版本22.2.1为例,我们首先来看Fragment的startActivityForResult方法。在这个方法...

    用注解方式处理各种OnActivityResult.zip

    在Android开发中,`OnActivityResult`是用于处理Activity之间数据交互的重要机制...通过学习和使用这样的工具,开发者不仅可以提高代码质量,还能了解到如何利用注解处理器这一编译时工具来增强代码的功能和可维护性。

    Android简单的页面启动器,不用再使用onActivityResult来取得返回值 Kotlin + androidx 实现

    在 Kotlin 和 AndroidX 中,你可以使用 startActivityForResult 的替代方法 registerForActivityResult 来获取启动页面后返回的结果,而不必再使用 onActivityResult。下面是一个简单的示例,演示如何实现一个页面...

    onActivityResult的小demo

    这个小demo旨在帮助新手开发者理解如何在Android应用中正确使用`startActivityForResult`和`onActivityResult`进行Activity间通信。通过这种方式,你可以实现如选择图片、获取用户输入等交互功能,增强应用程序的...

Global site tag (gtag.js) - Google Analytics