第一個activity代碼:
package cn.com.chenzheng_java;</p><p>import android.app.Activity;<br />import android.content.Intent;<br />import android.os.Bundle;<br />import android.view.View;<br />import android.view.View.OnClickListener;<br />import android.widget.Button;<br />import android.widget.TextView;</p><p>public class ForResultActivity extends Activity {<br />private TextView textView;<br />@Override<br />public void onCreate(Bundle savedInstanceState) {<br />super.onCreate(savedInstanceState);<br />setContentView(R.layout.main);<br />textView = (TextView)findViewById(R.id.textView2);<br />Button button = (Button)findViewById(R.id.button12);</p><p>button.setOnClickListener(new OnClickListener() {</p><p>@Override<br />public void onClick(View v) {<br />run();</p><p>}<br />});</p><p>}</p><p>private void run() {<br />Intent intent = new Intent();<br />intent.putExtra("name", "chenzheng_java");<br />intent.putExtra("age", 23);<br />intent.putExtra("isMan", true);<br />intent.putExtra("description", "送你一個帥哥");<br />intent.setClass(ForResultActivity.this, ReturnResultActivity.class);<br />// 通過該方法可以擷取後邊的activity返回的資料(主要還是通過intent進行互動的)<br />startActivityForResult(intent, 1);<br />}</p><p>/***<br /> * 想要擷取後邊的activity中返回的內容就要重寫該方法 該方法將會在後邊的activity調用setResult方法後被觸發。<br /> * requestCode 請求碼<br /> * 即我們在startActivityForResult中指定的那個1,我們可以通過這個標識判斷,後邊activity返回的是不是我們請求的東西<br /> * resultCode 返回的結果碼 後邊的activity給我們的一個標識狀態資訊的值<br /> * data 返回的intent對象<br /> */<br />@Override<br />protected void onActivityResult(int requestCode, int resultCode, Intent data) {<br />switch (resultCode) {<br />case RESULT_OK:<br />Bundle bundle = data.getExtras();<br />String info = bundle.getString("info");<br />textView.setText(info+" requestCode="+requestCode);<br />break;</p><p>default:<br />break;<br />}<br />}</p><p>}
第二個activity代碼:
package cn.com.chenzheng_java;</p><p>import android.app.Activity;<br />import android.content.Intent;<br />import android.os.Bundle;<br />import android.view.View;<br />import android.widget.Button;<br />import android.widget.EditText;</p><p>public class ReturnResultActivity extends Activity {</p><p>@Override<br />protected void onCreate(Bundle savedInstanceState) {<br />super.onCreate(savedInstanceState);<br />setContentView(R.layout.layout1);<br />Button button = (Button)findViewById(R.id.button);<br />button.setOnClickListener(new View.OnClickListener(){<br />@Override<br />public void onClick(View v) {<br />Intent intent2 = new Intent();<br />intent2.putExtra("info", "hahahaha");<br />// 通過調用setResult方法返回結果給前一個activity。<br />ReturnResultActivity.this.setResult(RESULT_OK, intent2);<br />//關閉當前activity<br />ReturnResultActivity.this.finish();<br />}});<br />}<br />}<br />
記住,要在androidmanifest.xml檔案中聲明兩個activity哦,代碼如下:
<?xml version="1.0" encoding="utf-8"?><br /><manifest xmlns:android="http://schemas.android.com/apk/res/android"<br /> package="cn.com.chenzheng_java"<br /> android:versionCode="1"<br /> android:versionName="1.0"><br /> <uses-sdk android:minSdkVersion="8" /></p><p> <application android:icon="@drawable/icon" android:label="@string/app_name"><br /> <activity android:name=".ForResultActivity"<br /> android:label="@string/app_name"><br /> <intent-filter><br /> <action android:name="android.intent.action.MAIN" /><br /> <category android:name="android.intent.category.LAUNCHER" /><br /> </intent-filter><br /> </activity><br /> <!-- 這裡一定要聲明該activity,否則系統是找不到該activity的 --><br /><activity android:name="ReturnResultActivity"></activity><br /> </application><br /></manifest>
-------------------------------------------------------------------------
讓我們來總結下,關於activity之間相互跳轉的問題:
activity與activity之間的跳轉是通過意圖Intent進行的。
intent有一個setClass方法,Intent setClass(Context packageContext, Class<?> cls)第一個參數為當前context,第二個參數為要跳轉到的activity。
我們跳轉時,可以通過startActivity()方法進行跳轉,這樣的跳轉是沒有傳回值的。如果你想要後邊的activity返回給當前activity一些資料的話,那麼只能通過startActivityForResult()方法。void startActivityForResult(Intent intent, int requestCode),第一個參數為intent,第二個參數為一個請求碼,這個數字是你自己設定的。
除此之外,我們要想獲得後邊的activity返回給我們的資料,我們還要在當前activity中實現,onActivityResult(int requestCode, int resultCode, Intent data) 方法,其中requestCode與startActivityForResult方法中的requestCode保持一致。(requestCode實際上很有用,如果我們當前的activity可以跳轉到很多activity,並且每一個activity都會返回給你資料,那麼我們是如何判斷到底返回的資料是哪個請求的呢,這裡就是用的requestCode)。
在後邊的activity中(被我們通過startActivityForResult方法啟用的activity),我們通過this.setResult()方法來返回資料,setResult(int resultCode, Intent data)第一個參數為標識位,就是我們前一個activity實現onActivityResult方法時的resultCode,我們可以通過該值知道資料處理是否成功。
可能取值為:RESULT_CANCELED RESULT_OK RESULT_FIRST_USER。
在setResult()之後調用finish方法是為了銷毀當前activity,讓前一個activity獲得顯示機會。
此外,還可以通過 intent.setClassName(String packageName, String className) 方法設定跳轉目標,其中packageName是當前activity的包名稱,className是目標activity的全路徑名,這裡一定要注意,是全路徑名稱!
當然還有Intent 的setClassName(Context packageContext, String className)也是同樣的功能,這裡貼出他們的api部分。