在前幾篇的 "啟動新 Activity" 中,介紹如何在舊 Activity 中啟動新的 Activity,如果情況是 Activity 互相切換甚至它們還能傳送數值,要如何做到呢? 很簡單,一樣使用 Intent 設定要切換的 Activity ,接著利用 Bundle 綁定數值,就能達到目的了,以下建立 2 個 Activity
第 1 個 MainActivity
1: package com.example.androidtestproject;
2:
3: import android.app.Activity;
4: import android.content.Intent;
5: import android.os.Bundle;
6: import android.view.Menu;
7: import android.view.View;
8: import android.view.View.OnClickListener;
9: import android.widget.Button;
10: import android.widget.TextView;
11:
12: public class MainActivity extends Activity {
13:
14: Button bright;
15:
16: TextView tv1;
17:
18: int num;
19:
20: @Override
21: public void onCreate(Bundle savedInstanceState) {
22: super.onCreate(savedInstanceState);
23: setContentView(R.layout.activity_main);
24:
25: Bundle b = this.getIntent().getExtras();
26: if (b != null) {
27: num = b.getInt("num");
28: }
29:
30: tv1 = (TextView) findViewById(R.id.text1);
31:
32: tv1.setText("MainActivity1: " + num);
33:
34: bright = (Button) findViewById(R.id.buttonright);
35: bright.setOnClickListener(new OnClickListener() {
36:
37: @Override
38: public void onClick(View v) {
39: // TODO Auto-generated method stub
40:
41: Bundle b = new Bundle();
42: num++;
43: b.putInt("num", num);
44:
45: Intent inte = new Intent();
46: inte.setClass(MainActivity.this, MainActivity2.class);
47: inte.putExtras(b);
48:
49: startActivity(inte);
MainActivity.this.finish();
50: }
51: });
52:
53: }
54:
55: }
第 23 行的 R.layout.activity_main 內容如下,裡面只有 1 個按鈕,和 1 個 TextView
1: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2: xmlns:tools="http://schemas.android.com/tools"
3: android:layout_width="match_parent"
4: android:layout_height="match_parent" >
5:
6: <TextView
7: android:id="@+id/text1"
8: android:layout_width="wrap_content"
9: android:layout_height="wrap_content"
10: android:layout_centerHorizontal="true"
11: android:layout_centerVertical="true"
12: android:text="@string/hello_world"
13: tools:context=".MainActivity" />
14:
15: <Button
16: android:id="@+id/buttonright"
17: android:layout_width="wrap_content"
18: android:layout_height="wrap_content"
19: android:layout_alignParentBottom="true"
20: android:layout_alignParentRight="true"
21: android:text="activity2" />
22:
23: </RelativeLayout>
第 25 ~ 28 行為取得從 MainActivity2 傳來的資料,注意第 26 行檢查 b 是否為 null , 因為在啟動程序時並不會有數值傳送,如果沒有檢查第 27 行就會出現錯誤
第 41 ~ 43 行為建立 Bundle 物件 b , 並放入數值 num , 放入的方式是 key - value 對應,在另 1 個 Activity 中取得數值時也必須藉由 key 來取得
第 45 ~ 46 行為設定切換的 Activity , 第 1 個參數為自己本身, 第 2 個參數為另 1 個 Activity
第 47 行將第 41 行建立的 b 放入以便傳送
第 49 行開始切換
接著是第 2 個 MainActivity 的內容
1: package com.example.androidtestproject;
2:
3: import android.app.Activity;
4: import android.content.Intent;
5: import android.os.Bundle;
6: import android.view.View;
7: import android.view.View.OnClickListener;
8: import android.widget.Button;
9: import android.widget.TextView;
10:
11: public class MainActivity2 extends Activity {
12:
13: Button bright;
14:
15: TextView tv1;
16:
17: int num;
18:
19: @Override
20: public void onCreate(Bundle savedInstanceState) {
21: super.onCreate(savedInstanceState);
22: setContentView(R.layout.activity_main2);
23:
24: Bundle b = this.getIntent().getExtras();
25: num = b.getInt("num");
26:
27: tv1 = (TextView) findViewById(R.id.text2);
28: tv1.setText("MainActivity2: " + num);
29:
30: bright = (Button) findViewById(R.id.buttonright);
31: bright.setOnClickListener(new OnClickListener() {
32:
33: @Override
34: public void onClick(View v) {
35: // TODO Auto-generated method stub
36:
37: Bundle b = new Bundle();
38: num++;
39: b.putInt("num", num);
40:
41: Intent inte = new Intent();
42: inte.setClass(MainActivity2.this, MainActivity.class);
43: inte.putExtras(b);
44:
45: startActivity(inte);
MainActivity2.this.finish();
46: }
47: });
48:
49: }
50: }
內容和第 1 個 MainActivity 相當類似,只差沒有檢查 b 是否為 null , 因為這個 Activity 預設並不會先啟動,一定會有 Activity 傳資料給它
結果為
一開始的 Activity 畫面,數值為 0
點選右下方的 button 之後,數值增加
0 意見:
張貼留言