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,
第一個引數:這個整數requestCode提供給onActivityResult,是以便確認返回的資料是從哪個Activity返回的。
這個requestCode和startActivityForResult中的requestCode相對應。
第二個引數:這整數resultCode是由子Activity通過其setResult()方法返回。
第三個引數:一個Intent物件,帶有返回的資料。
<3>setResult(int resultCode, Intent data)
呼叫這個方法把Activity想要返回的資料返回到父Activity
第一個引數:當Activity結束時resultCode
第二個引數:一個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); }}