Android-startActivityForResult()启动activity

举例说我想要做的一个事情是,在一个主界面(主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()会无差别处理。

时间: 2024-08-26 12:10:38

Android-startActivityForResult()启动activity的相关文章

Android开机启动Activity界面

1,原理: 当Android系统完成BOOT阶段之后,就会发送一条名为 ACTION_BOOT_COMPLETED 的广播,我们便可在一个BroadcastReceiver中捕获这条广播,然后启动我们的Activity或者Service,当然要注意的是,我们的application必须具有捕获该广播的权限,下面请看具体步骤: 第一步:首先要有一个用于开机启动的Activity或者Service,这里以系统自己创建的最简单的Activity为例进行讲解. package com.billhoo.s

怎么找Android的启动Activity

怎么找到Android的启动Activity 一.apk反编译,得到程序的源代码.图片.XML配置.语言资源等文件 二.找activity流程: 打开apk反编译后文件的文件夹,找到其中的Androidmanifest.XML文件,用浏览器的方式打开也行! 在浏览器中Ctrl+F搜索文字MAIN,找到MAIN上级activity层的android:name字段,android:name字段后面的值就是用来启动app的activity,appium要用的activity. (号外)最后奉上我反编译

Android app启动activity并调用onCreate()方法时都默默地干了什么?

Android app启动activity并调用onCreate() 方法时都默默地干了什么? 在AndroidManifest.xml文件中的<intent-filter>元素中有这么两句: <intent-filter>     <action android:name="android.intent.action.MAIN"/>     <category android:name="android.intent.categor

Android 外部启动activity,自定义action,action常量大全

从任意app,启动另外一个app的activity: 1.   Intent i = new Intent(); ComponentName cn = new ComponentName("com.book.android2",  "com.book.android2.AndroidSearch"); i.setComponent(cn); i.setAction("android.intent.action.MAIN"); startActiv

调用startActivityForResult启动activity,返回当前页不响应的问题(附带activity携带参数流程)

最近在项目遇到这样一个问题,原始的activity不是为我写,后面我要改成返回activity携带参数.我改好了之后 发现不能调用onActivityResult.调试也没有问题,activity结束时候我也是用finish函数的.这样的话,不细心就不会查到Manifest 配置activity语句上.下面说说不响应的问题. 一.Manifest 配置的启动方式有关 activity跟 Manifest 配置的启动方式有关,不要配置启动方式:android:launchMode="singleT

如何找到Android app启动activity和页面元素信息

在实施app自动化的时候,我们需要知道app 的启动activity和页面元素信息,以此启动app和定位页面元素,那么如何在没有源码的情况下找打他们呢?当然是有好的工具啦,有Android sdk自带的工具可以很好的帮助我们解决这个问题. 1.获取启动类 aapt命令(该工具位置:C:\Users\...\AppData\Local\android\Sdk\build-tools\24.0.1),配置环境变量后可以在cmd命令行打开. cd进入apk的下载目录 使用命令:aapt dump ba

Android 匿名启动activity 启动系统activity

一般我们使用Intent 进行activity跳转时我们都知道需要跳转的activity的名字,例如: Intent intent=new Intent(FirstActivity.this,SecondActitivy.class); startActivity(intent); 当SecondActitivy.class和FirstActivity不再同一个App的时候,我们就需要用到匿名启动, 匿名启动: 首先需要设置被启动的SecondActivity 的xml配置文件: <activi

Android App 启动 Activity 创建解析

继承实现类关系: ActivityThread  thread = new ActivityThread(); Context->ContextImpl   ContextImpl context = new ContextImpl(null, mainThread, packageInfo, activityInfo.splitName,activityToken, null, 0, classLoader);    Window->PhoneWindow WindowManger->

Android 启动Activity的方式

Activity的启动分为两种方式,显示方式和隐式方式,显示方式就是在通过intent启动Activity时指定了Activity的包名和类名, 而隐式方式则在初始化Intent时只指定action或action和data属性.接下来将来总结显示启动和隐式启动的方式和注意事项. 1.Activity的显示启动:通过包名来启动(不管是启动自己应用的Activity还是启动其他应用的Activity) 1.1 ComponentName对象的方式 ComponentName cn = new Com

Android基础之——startActivityForResult启动界面并返回数据,上传头像

在android应用的开发过程中,经常会出现启动一个界面后填写部分内容后带着数据返回启动前的界面,最典型的应用就是登录过程.在很多应用程序的模块中,都有"我的"这个模块,在未登录状态下点击其中的某一项,就会弹出登录界面,登录完成后回到我的界面,会显示一些登录后的数据,这个功能的实现就要用到startActivityForResult. 下面通过一个小demo来说明一下startActivityForResult的使用,以及在实际开发中的一些应用. demo的效果图如下: 主界面布局: