Activity之間連結和傳遞參數主要通過Intent安卓的一個對象來實現。
首先我們建立一個MainActivity:
package com.example.androidtest;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.Window;import android.widget.Toast;/** * 安卓入口檔案 * @author zhuli.zhul * @date 2013 2013-6-5 下午3:09:14 */public class MainActivity extends Activity { private String tag = "MainActivity"; private int request_code = 1; /** * 頁面配置 */ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); //設定一個View模板 Log.d(tag, "In the onCreate() event"); } /** * 點擊開啟一個新的Activity頁面 * @param view */ public void onClickStartActivity(View view) { Log.d(tag, "onClickStartActivity"); //下面可以傳遞參數,以及點擊後,開啟一個新的Activity Intent i = new Intent("android.intent.action.OpenActivity"); i.putExtra("str", "這個是傳遞一個參數"); i.putExtra("int", 100); startActivityForResult(i, request_code); } /** * 監控開啟的Activity頁面關閉後回傳的參數 */ public void onActivityResult(int requestCode, int resultCode, Intent data) { Toast.makeText(getBaseContext(), data.getData().toString(), Toast.LENGTH_SHORT).show(); }}
同時在layout檔案夾下建立一個布局檔案activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/btn_dialogs" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/startActivity" android:onClick="onClickStartActivity" /> </LinearLayout>
點擊布局頁面上的按鈕後,就會觸發onClickStartActivity方法,該方法會啟動一個OpenActivity:
同時我們傳遞了str和int參數過去。
/** * 點擊開啟一個新的Activity頁面 * @param view */ public void onClickStartActivity(View view) { Log.d(tag, "onClickStartActivity"); //下面可以傳遞參數,以及點擊後,開啟一個新的Activity Intent i = new Intent("android.intent.action.OpenActivity"); i.putExtra("str", "這個是傳遞一個參數"); i.putExtra("int", 100); startActivityForResult(i, request_code); }
建立一個OpenActivity:
OpenActivity中,建立了一個布局的頁面,並且布局頁面中,有通過訊息的方式輸出MainActivity的參數
並且OpenActivity中,有一個OnClick方法,主要用來點擊布局頁面上的一個按鈕後觸發,並且OnClick方法主要操作就是返回MainActivity,並且傳遞參數“Hello World”到MainActivity
package com.example.androidtest;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.Window;import android.widget.Toast;public class OpenActivity extends Activity { /** * 頁面配置 */ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_open); //設定一個View模板 Log.d("SECOND", "In the onCreate() event"); //捕獲MainActivity開啟該Activity後 接收傳遞過來的參數 String str = getIntent().getStringExtra("str"); Toast.makeText(getBaseContext(), str, Toast.LENGTH_SHORT).show(); int i = getIntent().getIntExtra("int", 0); Toast.makeText(getBaseContext(), "年齡是:" + i, Toast.LENGTH_SHORT).show(); } /** * 點擊按鈕事件後,返回MainActivity頁面 * @param view */ public void onClick(View view) { Intent data = new Intent(); data.setData(Uri.parse("Hello World")); setResult(1, data); finish(); }}
建立一個布局檔案activity_open:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <AnalogClock android:id="@+id/analogClock1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/btn_dialogs" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/progressDialog" android:onClick="onClick" /> </LinearLayout>
修改AndroidManifest.xml:
新增或者修改Activity都需要在AndroidManifest.xml中進行相關修改:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.androidtest" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <!-- 預設的Activity --> <activity android:name="com.example.androidtest.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 新增的Activity --> <activity android:name=".OpenActivity" android:label="Open Activity" > <intent-filter> <action android:name="android.intent.action.OpenActivity" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application></manifest>
說明:
開啟新的Activity和傳遞參數:
Intent i = new Intent("android.intent.action.OpenActivity"); i.putExtra("str", "這個是傳遞一個參數"); i.putExtra("int", 100); startActivityForResult(i, request_code);
接收傳遞的參數:
//捕獲MainActivity開啟該Activity後 接收傳遞過來的參數 String str = getIntent().getStringExtra("str"); Toast.makeText(getBaseContext(), str, Toast.LENGTH_SHORT).show(); int i = getIntent().getIntExtra("int", 0); Toast.makeText(getBaseContext(), "年齡是:" + i, Toast.LENGTH_SHORT).show();
開啟的Activity結束關閉後並傳遞參數到前一個Activity:
Intent data = new Intent(); data.setData(Uri.parse("Hello World")); //傳遞參數 setResult(RESULT_OK, data); //傳遞參數 RESULT_OK - 狀態 data - 具體參數 finish();
監聽回調的參數:
/** * 監控開啟的Activity頁面關閉後回傳的參數 */ public void onActivityResult(int requestCode, int resultCode, Intent data) { //requestCode 是startActivityForResult 傳遞的request_code,用於區分一個頁面上開啟的不同的Activity //resultCode 是setResult(RESULT_OK, data) 中的RESULT_OK 這個參數,主要是回調的資料狀態 //data就是傳遞的資料 if (requestCode == request_code) { if (resultCode == RESULT_OK) { Toast.makeText(getBaseContext(), data.getData().toString(), Toast.LENGTH_SHORT).show(); } } }