Activity之间数据交流(startActivityForResult , onActivityResult , setResult 的用法)

主要功能:android

在一个主界面(主Activity)上能链接往许多不一样子功能模块(子Activity上去),当子模块的事情作完以后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity处理。这样的数据交流就要用到 主Activity 回调方法onActivityResult()。
 
下面介绍具体流程:
 
Activity中:
<1> Activity里面传递一个Intent对象,给即将打开的 Activity,并用requestCode区分打开哪一个  Activity
startActivityForResult(Intent intent, int requestCode);

第一个参数Intent intent:  一个Intent对象app

第二个参数 int requestCode :>= 0, 主Activity结束时requestCode 将归还在onActivityResult()中。以便肯定返回的数据是从哪一个Activity中返回
 
 
 
<2> Activity 里重写这个方法,接收 Activity 收传入的 Intent的对象, Activity既能够经过switch/ case语句用 requestCode 来区分不一样的 Activity, 也能够经过resultCode 来区分
onActivityResult(int requestCode, int resultCodeIntent data)
int requestCode: 这个整数requestCode提供给onActivityResult,是以便确认返回的数据是从哪一个Activity返回的。 这个requestCode     
                               startActivityForResult中的requestCode相对应。

int resultCode:    子Activity经过其setResult()方法返回。 ide

Intent data :          一个Intent对象,带有返回的数据。
 
 
Activity中:
<3> Activity 调用这个方法把数据返回到 Activity ,同时也返回区分本身的resultCode
setResult(int resultCodeIntent data)

int resultCode:  子Activity结束时resultCode将归还在主Activity的onActivityResult()中,通常为RESULT_CANCELED , RESULT_OKthis

Intent data:       一个Intent对象,返回给父Activity的数据。spa

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

同理:.net

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

地球--》飞往月球 月球---》返回地球  对象

 

 

具体实现:blog

主Activity:ci

package  xiaosi.onActivityResult;
 
import  android.app.Activity;
import  android.content.Intent;
import  android.os.Bundle;
import  android.view.View;
import  android.view.View.OnClickListener;
import  android.widget.Button;
import  android.widget.TextView;
 
public  class  OnActivityResultActivity  extends  Activity
{
        private  Button                      button      =  null ;
        private  Button                      button1     =  null ;
        private  TextView              text  =  null ;
        private  static  final  int       Mars  = 0;
        private  static  final  int       Moon  = 1;
 
        @ Override
        public  void  onCreate(Bundle savedInstanceState)
      {
              super .onCreate(savedInstanceState);
            setContentView(R.layout.main);
            text = (TextView) findViewById(R.id.text);
            button = (Button) findViewById(R.id.button);
            button.setOnClickListener(  new  OnClickListener() {
                    @ Override
                    public  void  onClick(View v)
                  {
                        Intent intent =  new  Intent(OnActivityResultActivity. this  , otherActivity. class );
                        String content =  "地球来的消息:你好,我是来自地球上的小老鼠。我好想去大家的火星呀"  ;
                        intent.putExtra(  "FromEarth" , content);
                        startActivityForResult(intent, Mars);
                  }
            });
            button1 = (Button) findViewById(R.id.button1);
            button1.setOnClickListener(  new  OnClickListener() {
                    @ Override
                    public  void  onClick(View v)
                  {
                        Intent intent =  new  Intent(OnActivityResultActivity. this  , thirdActivity. class );
                        String content =  "地球来的消息:你好,我是来自地球上的小老鼠。我好想去大家月球"  ;
                        intent.putExtra(  "FromEarth" , content);
                        startActivityForResult(intent, Moon);
                  }
            });
      }
 
        @ Override  
        protected  void  onActivityResult( int  requestCode,  int  resultCode, Intent data)//重写 onActivityResult方法
      {
              switch  (requestCode)
            {
              case  Mars:
                  Bundle MarsBuddle = data.getExtras();
                  String MarsMessage = MarsBuddle.getString(  "FromMars" );
                  text.setText(MarsMessage);
                    break ;
              case  Moon:
                  Bundle MoonBuddle = data.getExtras();
                  String MoonMessage = MoonBuddle.getString(  "FromMoon" );
                  text.setText(MoonMessage);
                    break ;
            }
      }
}
 
 

otherActivity:get

package  xiaosi.onActivityResult;
 
import  android.app.Activity;
import  android.content.Intent;
import  android.os.Bundle;
import  android.view.View;
import  android.widget.Button;
import  android.widget.TextView;
 
public  class  otherActivity  extends  Activity
{
        private  Button    button      =  null ;
 
        @ Override
        public  void  onCreate(Bundle savedInstanceState)
      {
              super .onCreate(savedInstanceState);
            setContentView(R.layout.other);
            Intent EarthIntent = getIntent();
            String EarthMessage = EarthIntent.getStringExtra( "FromEarth"  );
            button = (Button) findViewById(R.id.button);
            button.setOnClickListener(  new  View.OnClickListener() {
                    @ Override
                    public  void  onClick(View v)
                  {
                        Intent intent =  new  Intent(otherActivity. this , OnActivityResultActivity. class  );
                        String passString =  "火星来的消息:Hello,我是火星的Jack,很是高兴你能来火星"  ;
                        intent.putExtra(  "FromMars" , passString);
                        setResult(RESULT_OK, intent);
                        finish();
                  }
            });
            TextView textView = (TextView) findViewById(R.id.othertext);
            textView.setText(EarthMessage);
      }
}
 
 

thirdActivity:

package  xiaosi.onActivityResult;
 
import  android.app.Activity;
import  android.content.Intent;
import  android.os.Bundle;
import  android.view.View;
import  android.widget.Button;
import  android.widget.TextView;
 
public  class  thirdActivity  extends  Activity
{
        private  Button    button      =  null ;
 
        @ Override
        public  void  onCreate(Bundle savedInstanceState)
      {
              super .onCreate(savedInstanceState);
            setContentView(R.layout.third);
            Intent EarthIntent = getIntent();
            String EarthMessage = EarthIntent.getStringExtra( "FromEarth"  );
            button = (Button) findViewById(R.id.button);
            button.setOnClickListener(  new  View.OnClickListener() {
                    @ Override
                    public  void  onClick(View v)
                  {
                        Intent intent =  new  Intent(thirdActivity. this , OnActivityResultActivity. class  );
                        String passString =  "月球来的消息:Hello,我是月球的Lucy,很是欢迎你来月球"  ;
                        intent.putExtra(  "FromMoon" , passString);
                        setResult(RESULT_OK, intent);
                        finish();
                  }
            });
            TextView textView = (TextView) findViewById(R.id.thirdtext);
            textView.setText(EarthMessage);
      }
}
相关文章
相关标签/搜索