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

原创 2012年03月23日 15:19:47

主要功能:

在一个主界面(主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);
	}
}






版权声明:本文为博主原创文章,未经博主允许不得转载。

Android中的onActivityResult和setResult方法的使用

如果你想在Activity中得到新打开Activity 关闭后返回的数据,你需要使用系统提供的startActivityForResult(Intent intent,int requestCode)...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2013年11月27日 12:11
  • 139950

Android中onActivityResult方法总结

onActivityResult方法存在于Activity和Fragment中,主要yong'y
  • hxors
  • hxors
  • 2014年09月11日 21:51
  • 739

Android Activity 中 onActivityResult() 与 setResult()

在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity处理。这样的数据交...
  • xuzhoude_han
  • xuzhoude_han
  • 2017年02月24日 09:55
  • 401

Android开发基础 startActivityForResult()、onActivityResult()和setResult()方法之间的联系

在以前开发的时候,只是使用过,知道如果要是想从上一个Activity中得到处理的一些状态需要调用这几个方法,但是这几个方法中的参数老是记忆的很混乱,今天在开发项目的时候,忽然想到了一些东西,特意记下免...
  • L_zhp
  • L_zhp
  • 2016年03月29日 21:51
  • 2362

Android中的onActivityResult和setResult方法的使用

如果你想在Activity中得到新打开Activity关闭后返回的数据,你需要使用系统提供的startActivityForResult(Intent intent,int requestCode)...
  • u011630575
  • u011630575
  • 2015年11月26日 13:52
  • 6066

Android调用相机无法执行onActivityResult或data为null

最近项目中调用系统相机时遇到了这么个问题:红米手机无法执行onActivityResult回调,部分华为手机无法获取到照片数据,最后各种分析,各种网上搜索资料折腾了好久,最后终于把问题解决,当看到问题...
  • huyongl1989
  • huyongl1989
  • 2015年09月26日 14:31
  • 10446

【Android实战】----调用startActivityForResult()后,onActivityResult()立即执行的问题

一、问题描述 遇到该问题两次了,决定在此记录,以观后效。问题现象就是题目中所说:调用startActivityForResult()后,onActivityResult()立即执行的问题 二、代码...
  • honghailiang888
  • honghailiang888
  • 2017年02月21日 08:55
  • 1666

Android中的onActivityResult和setResult方法的使用

【声明】此文转载自:http://blog.csdn.net/jiangwei0910410003/article/details/16983049 ——尊重作者,知识无价,交流无限! 如果你...
  • huntersnail
  • huntersnail
  • 2015年11月06日 16:04
  • 1718

完美解决Android中onActivityResult提前执行调用的一系列问题

这是原本要启动的AddressActivityint requestCode = 200; Intent intent = new Intent(this,AddressActivity.class)...
  • codekxx
  • codekxx
  • 2016年12月06日 23:20
  • 1491

Android开发关于onActivityResult()的执行时间问题

当我们调用startActivityForResult()方法来跳转页面的时候需要重写onActivityResult方法,不然就和startActivity没什么两样,本文说明onActivityR...
  • gu_solo
  • gu_solo
  • 2015年08月27日 09:40
  • 1019
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android进阶2之Activity之间数据交流(onActivityResult的用法)
举报原因:
原因补充:

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