Android活动间调用并且返回后的数据

Android活动之间相互跳转并且返回数据的时候,需要使用Activity的startActivityForResult()方法。下面将有一个例子来详细讲述startActivityForResult()方法和一些注意事项。

例子:

1. activity_first.xml

 

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".FirstActivity" >

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="20dp"
        android:text="转到SecondActivity"
        android:onClick="OnSecondClick"/>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/button"
        android:onClick="OnThirdClick"
        android:text="转到ThirdActivity" />

</RelativeLayout>


2. FirstActivity

 

package com.example.teststartactivityforresult;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;

public class FirstActivity extends Activity {
 
	public String message;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_first);
	}

	public void OnSecondClick(View v){
		Intent intent  = new Intent();
		intent.setClass(this, SecondActivity.class);
		startActivityForResult(intent,2);//转到SecondActivity
	}
	
	
	
	public void OnThirdClick(View v){
		Intent intent  = new Intent();
		intent.setClass(this, ThirdActivity.class);
		startActivityForResult(intent,3);//转到ThirdActivity
	}
	
	
	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
	    super.onActivityResult(requestCode, resultCode, data);
    	switch(requestCode){
     	   case 2:
     		  switch(resultCode){
    	        case  0:
    	          message = data.getStringExtra("return");
    	    	  Toast.makeText(this, message, Toast.LENGTH_LONG).show();
    	          break;
    	        case 1:
    	         message = data.getStringExtra("return");
    	         Toast.makeText(this, message, Toast.LENGTH_LONG).show();
    	         break;
	          }
     		  break;
     	   case 3:
     		  switch(resultCode){
    	        case  RESULT_OK:
    	          message = data.getStringExtra("return");
    	          Toast.makeText(this, message, Toast.LENGTH_LONG).show();       
	          }
     		  break;
    	}
	}
	          


}


3. activity_second.xml

 

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".SecondActivity" >

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="20dp"
        android:text="返回0到FirstActivity"
        android:onClick="OnButtonClick"/>

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button"
        android:layout_below="@+id/button"
        android:layout_marginTop="18dp"
        android:onClick="OnButton2Click"
        android:text="返回1到FirstActivity" />

</RelativeLayout>


4. SecondActivity

 

package com.example.teststartactivityforresult;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;

public class SecondActivity extends Activity {

	public Intent intent;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_second);
		
		intent = this.getIntent();
		
	}
	
	public void OnButtonClick(View v){
		intent.putExtra("return", "SecondActivity-0- 返回的内容");
		setResult(0,intent);//回调FirstActivity
		finish();//一定要结束该Activity  结束后返回到FirstActivity只执行onActivityResult方法
	}
	
	public void OnButton2Click(View v){
		intent.putExtra("return", "SecondActivity-1-返回的内容");
		setResult(1,intent);//回调FirstActivity
		finish();//一定要结束该Activity  结束后返回到FirstActivity只执行onActivityResult方法
	}

	

}


5. activity_third.xml

 

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".ThirdActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>


6. ThirdActivity

package com.example.teststartactivityforresult;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;

public class ThirdActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_third);
		
		Intent intent = this.getIntent();
		intent.putExtra("return", "ThirdActivity返回的内容");
		setResult(RESULT_OK,intent);
		finish();
	}

}


 

实现流程:

以FirstActivity和SecondActivity为例。

1. FirstActivity跳转到SecondActivity。

2. SecondActivity使用getIntent()方法,获得FirstActivity传过来的Intent对象。

3. SecondActivity将需要返回的数据封装在Intent对象中。

4. SecondActivity 使用serResult()方法将Intent对象返回。

5. SecondActivity  finish()。

6. FirstActivity执行onActivityResult方法。

注意事项:

对根据上面的例子进行一下说明。

1. 一个Activity可以调用多个Activity并且返回数据,例如FirstActivity.

2. 被调用并且需要返回数据的Activity可以根据不同情况给予不同的返回数据,例如SecondActivity。

3. FirstActivity调用SecondActivity后需要返回FirstActivity的时候,SecondActivity必须执行finish(),返回到FirstActivity后只执行onActivityResult方法。

参考网址:

1.http://blog.csdn.net/conowen/article/details/7292246

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值