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

转自:http://blog.csdn.net/sjf0115/article/details/7387467

主要功能:

在一个主界面(主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:

    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)
        {
            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:

    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);
        }
    }  
时间: 2024-10-12 23:19:55

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

【转】Android进阶2之Activity之间数据交流(onActivityResult的用法)----不错

原文网址:http://blog.csdn.net/sjf0115/article/details/7387467 主要功能: 在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity处理.这样的数据交流就要用到回调函数onActivityResult. <1>startActivityForResult(Intent intent, int requestCode);

无废话Android之smartimageview使用、android多线程下载、显式意图激活另外一个activity,检查网络是否可用定位到网络的位置、隐式意图激活另外一个activity、隐式意图的配置,自定义隐式意图、在不同activity之间数据传递(5)

1.smartimageview使用 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"

Android 笔记-Fragment 与 Activity之间传递数据

Fragment 与 Activity之间传递数据有两种方法,一种是使用setArgument,一种是使用接口回调.下面先学习第一种方法. (1)使用setArgument方法: 为了便于理解,我在这里打个比喻:假如Activity是皇帝,它设立了三个部门(如三省六部),分别是Fragment1,Fragment2和Fragemnt3: 现在他现在要吩咐部门Fragment1去做一些事情,比如说:领兵攻打岛国!!好,它肯定不自己跑去告诉该部门的. 一般来说,会有个宰相或者太监总管来负责皇帝口谕是

Android activity之间数据传递和共享的方式之Application

1.基于消息的通信机制  Intent ---bundle ,extra 数据类型有限,比如遇到不可序列化的数据Bitmap,InputStream,或者LinkedList链表等等数据类型就不太好用. 2.利用static静态数据, public static成员变量: 3.基于外部存储的传输,File/Preference/Sqlite 如果要针对第三方应用需要Content Provider 4.基于IPC的通信机制 context 与Service之间的传输,如Activity与Serv

解析activity之间数据传递方法的详解

转自:http://www.jb51.net/article/37227.htm 本篇文章是对activity之间数据传递的方法进行了详细的分析介绍,需要的朋友参考下 1  基于消息的通信机制 Intent--------boudle,extra用这种简单的形式,一般而言传递一些简单的类型是比较容易的,如int.string等详细介绍下Intent机制Intent包含两部分:1 目的[action]-------要去到哪里去2 内容[category.data]----------路上带些什么,

android中fragment和activity之间相互通信

在用到fragment的时候,老是会遇到一个问题,就是fragment与activity之间的通信.下面就来记录一下activity和fragment之间 通过实现接口来互相通信的方法. 1. activity 向fragment发出通信,就这么写: private OnMainListener mainListener; // 绑定接口 @Override public void onAttachFragment(Fragmentfragment) { try { mainListener =

Android笔记Fragment与Activity之间传递数据

Fragment 与 Activity之间传递数据有两种方法,一种是使用setArgument,一种是使用接口回调.下面先学习第一种方法. (1)使用setArgument方法: 为了便于理解,我在这里打个比喻:假如Activity是皇帝,它设立了三个部门(如三省六部),分别是Fragment1,Fragment2和Fragemnt3: 现在他现在要吩咐部门Fragment1去做一些事情,比如说:领兵攻打岛国!!好,它肯定不自己跑去告诉该部门的. 一般来说,会有个宰相或者太监总管来负责皇帝口谕是

android Activity之间数据传递 Parcelable和Serializable接口的使用

Activity之间传数据时,为了避免麻烦,往往会将一些值封装成对象,然后将整个对象传递过去.传对象的时候有两种情况,一种是实现Parcelable接口,一种是实现Serializable接口.0.解释两种接口:1)实现Serializable接口是JavaSE本身就支持的.2)Parcelable是Android特有的功能,效率比实现Serializable接口高,像用于Intent数据传递也都支持,而且还可以用在进程间通信(IPC),除了基本类型外,只有实现了Parcelable接口的类才能

android 不同Activity之间数据传递

1. 传值Activity package mydemo.mycom.demo2; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.