有来有去 startActivityForResult()

转载 2012年03月21日 16:41:10
在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,还同时返回一些子模块完成的数据交给主Activity处理。


用startActivity启动主界面是一个新的Intent实例,而访问的主界面还在activity栈的下面没有调出来,这样做的一个最大的问题是,回不到原界面就不能多个子功能模块共同来给主界面提供数据或服务了。
目的: A.java 是主界面,B.java 是子功能模块,要从A启动B,B干完活之后把结果汇报给A
先看 A.java 的相关代码


//-- A.java --//
//启动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("bdata");//str即为回传的值"data from b"
                      break;
default:
          break;
}
}


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


Intent aintent = new Intent(B.this, A.class);
aintent.putExtra("bdata", "data from b");
setResut(RESULT_OK,aintent); //这理有2个参数(int resultCode, Intent intent)
... ...
finish();


startActivityForResult(Intent intent, Int requestCode)
intent 传给B,requestCode >=0,随便用于在onActivityResult()区别哪个子模块回传的数据,如果还有C.java ,D甚至E子模块的话,每个区分开不同的requestCode就好。


setResut(int resultCode, Intent intent)
resultCode 如果B子模块可能有几种不同的结果返回,可以用这个参数予以识别区分。这里还有个特殊的 RESULT_OK 值,没有特殊情况用它就好。


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

startActivityForResult用法详解

  • 2016年12月02日 18:54
  • 88KB
  • 下载

StartActivityForResult

  • 2013年08月07日 16:02
  • 1017KB
  • 下载

告别onActivityResult ,用代理实现Rx方式获取startActivityForResult结果

要想完全告别onActivityResult(),有两种方案 1、使用进程注入的方式hook系统的activity数据发送,这种方案比较复杂,用到ndk知识,需要在源码下编译应用,不适合大部分人。 2...

【Activity】多个Activity带返回值跳转_startActivityForResult_【场景】选择项利用Activity实现,不用popuwindow的情况

开始CSDN体验之旅,督促一下自己!哼哼... 一般我们做地址选择框,或者自定义时间选择器时,都需要获取到选择的值,然后填充到编辑框里面,这样用户才知道自己选择了什么,同时也可能需要传递给后台。笔者认...

startActivityForResult的简单使用

  • 2013年11月22日 17:16
  • 438KB
  • 下载

【数据】Activity数据返回——startActivityForResult()用法详解

上一节我以“计算男女生标准体重”为例详细介绍了如何使用Intent、Bundle等实现不同Activity之间数据的传递问题,本节将仍以“计算男女生标准体重”为例详细介绍如何利用startActivi...

startActivityForResult用法实例

  • 2015年12月15日 09:57
  • 1.66MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:有来有去 startActivityForResult()
举报原因:
原因补充:

(最多只允许输入30个字)