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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章