android startActivityForResult()

举例说我想要做的一个事情是,在一个主界面(主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-03 14:34:02

android startActivityForResult()的相关文章

Android startActivityForResult的使用

Android startActivityForResult的使用 androidbuttonstringclass任务 在Android中startActivityForResult主要作用就是: A-Activity需要在B-Activtiy中执行一些数据操作,而B-Activity又要将,执行操作数据的结果返回给A-Activtiy //看效果 //看代码 [java] view plaincopyprint? package sn.len.actres; import android.a

Android -- startActivityForResult和setResult

startActivityForResult与startActivity的不同之处 startActivity( ) 仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( ). startActivityForResult( ) 可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activity调用了finish()方法以后,程序会自动跳转回T1Activity,并调用前一个T

Android startActivityForResult requestCode限制

requestCode的值必须小于2^16,否则会报如下错误: java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode

Android的startActivityForResult不起作用

之前startActivityForResult一直用的好好的,今天发现怎么也不起作用.检查后发现有两点影响了. 1.android:launchMode="singleTask",main里设成单例了: 2.startActivityForResult的requestcode须要大于0才干够.

startActivityForResult的用法(Android)

1.第一个页面的activity.java package cn.buaa.z1; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; public class MainActivity extends AppCompatA

简化Android的startActivityForResult调用

一个是解决在onActivityResult 中判断requestCode的问题,第二个是让调用代码的地方就知道我是如何处理对方activity的返回的. 首先我们有一个ResultActivityAdaptor,这个就封装了我的主要的逻辑 public class ResultActivityAdaptor { /** * 起始requestCode,用于兼容有一些老的逻辑,不让request code冲突 */ private final static int REQUEST_CODE_ST

android Intent的startActivityForResult()方法

startActivityForResult() 之前学习了利用Intent跳转页面的同时传值,但有的时候需要从跳转到的页面返回所需要的值(如修改了用户信息,需要返回修改的信息),通俗的意思就是A.Activity跳转到B.Activity,在A.Activity中要自动获取到B.Activity返回的数据. 1.介绍几个主要的方法: 1 MainActivity.this.startActivityForResult(intent1, 1); 第一个参数intent1就不介绍了,第二个参数的值

Android四大组件之——Activity的开启:StartActivity()和StartActivityForResult()(图文详解)

            如需转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:[email protected]       [Android四大组件学习系列Activity篇]        1.Android四大组件之——Activity(一)定义.状态和后退栈(图文详解) 2.Android四大组件之——Activity的生命周期(图文详解) 3.Android四大组件之——Activity的开启StartActivit

Android的startActivityForResult()与onActivityResult()与setResult()参数分析,activity带参数的返回

一.使用场景 在一个主界面(主Activity)通过意图跳转至多个不同子Activity上去,当子模块的代码执行完毕后再次返回主页面,将子activity中得到的数据显示在主界面/完成的数据交给主Activity处理.这种带数据的意图跳转需要使用activity的onActivityResult()方法. (1)startActivityForResult(Intent intent, int requestCode);  第一个参数:一个Intent对象,用于携带将跳转至下一个界面中使用的数据