(转载)Android进阶2之Activity之间数据交流(onActivityResult的用法)

转载自  http://www.blogjava.net/mixer-a/archive/2012/03/23/375014.html

主要功能:

在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity处理。这样的数据交流就要用到回调函数onActivityResult。

<1>startActivityForResult(Intent intent, int requestCode);

第一个参数:一个Intent对象

第二个参数:如果> = 0,当Activity结束时requestCode将归还在onActivityResult()中。以便确定返回的数据是从哪个Activity中返回

<2>onActivityResult(int requestCode, int resultCode, Intent data)

第一个参数:这个整数requestCode提供给onActivityResult,是以便确认返回的数据是从哪个Activity返回的。

            这个requestCode和startActivityForResult中的requestCode相对应。

第二个参数:这整数resultCode是由子Activity通过其setResult()方法返回。

第三个参数:一个Intent对象,带有返回的数据。

<3>setResult(int resultCode, Intent data)

调用这个方法把Activity想要返回的数据返回到父Activity

第一个参数:当Activity结束时resultCode将归还在onActivityResult()中,一般为RESULT_CANCELED , RESULT_OK。

第二个参数:一个Intent对象,返回给父Activity的数据。

 

 

       

   

 

 

本实例一共有三个Activity。点击飞往火星跳转到otherActivity,把地球带给火星的消息显示在otherActivity中。点击返回地球时把火星带给地球的消息传到主Activity.

同理:

点击飞往月球跳转到thirdActivity,把地球带给月球的消息显示在thirdActivity中。点击返回地球时把月球带给地球的消息传到主Activity.

 

具体实现:

主Activity:


otherActivity:

thirdActivity:

 

 

 

转载自   http://www.2cto.com/kf/201205/133027.html

 

androidActivity之间的跳转不只是有startActivity(Intent i)的,startActivityForResult(Intent intent, int requestCode)也是常用的方法。

   其作用是可以用onActivityResult(int requestCode, int resultCode, Intent data)方法获得请求Activity结束之后的操作。    需要注意三个方法:startActivityForResult(Intent intent, int requestCode),onActivityResult(int requestCode, int resultCode, Intent data),setResult(int resultCode, Intent data)

例如如下代码:从From跳转至ToB和ToC From: if(条件){ Intent intent = new Intent(this, ToB.class); startActivityForResult(serverIntent, REQUEST_CODE_01);//跳转至ToB }else{ Intent intent = new Intent(this, ToC.class); startActivityForResult(serverIntent, REQUEST_CODE_02);//跳转至ToC }   public void onActivityResult(int requestCode, int resultCode, Intent data){           switch (requestCode) { case REQUEST_CODE_01:                         if(resultCode==Activity.RESULT_OK)                         //do something                         break;                 case REQUEST_CODE_02: //do something                         break; } }         这里说说startActivityForResult(Intent intent, int requestCode)的参数,第一个Intent不用说了,需要注意的是第二个,我们用的是REQUEST_CODE_01和REQUEST_CODE_02,其实这个是我们自己定义的一个int型常量,用于标记的,具体作用可在onActivityResult方法里看到,用于判断是从哪个Activity返回的。   ToB: Intent intent = new Intent(); intent.putExtra(key, value); setResult(Activity.RESULT_OK, intent); finish();//结束之后会将结果传回From   ToC: Intent intent = new Intent(); intent.putExtra(key, value); setResult(Activity.RESULT_OK, intent); finish();//结束之后会将结果传回From      setResult的第一个参数对应上面onActivityResult的第二个参数,注意别把onActivityResult的第一个参数与第二个参数搞混淆了,一个是请求标记,一个是返回标记。   欢迎补充~~~

posted @ 2014-02-27 11:00  张泉  阅读(596)  评论(0编辑  收藏  举报