1. 程式人生 > >Android進階2之Activity之間資料交流(onActivityResult的用法)

Android進階2之Activity之間資料交流(onActivityResult的用法)

               

主要功能:

在一個主介面(主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 Activityprivate Button    button = nullprivate Button    button1 = nullprivate TextView   text = nullprivate static final int Mars = 0private 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 Activityprivate 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 Activityprivate 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); }}