1. 程式人生 > >3. 呼叫另一個Activity,並兩個Activity之間相互傳遞資料

3. 呼叫另一個Activity,並兩個Activity之間相互傳遞資料

一,在一個Activity中呼叫另一個Activity

利用 android.content.Intent 物件實現從一個Activity跳轉到另一個Activity

例如:從FirstActivity跳轉到SecondActivity

/*           關鍵程式碼             */
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);

this.startActivity(intent);

//this.finish();          這個函式將結束當前的Activity, 如果不呼叫的話, 當前Activity只是失去了控制權, 暫時處於onPause狀態

二,不同Activity之間的資料傳遞

利用android.os.Bundle物件封裝需要傳遞的資料

例如:從FirstActivity傳遞一些資料到SecondActivity

/*           關鍵程式碼             */
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);

Bundle bundle = new Bundle();

bundle.put***("key",value);    //這裡***代表value的型別, 如果value的型別是String, 則該函式為putString; "key"是value的標識, 方便接收的Activity解析。

intent.putExtras(bundle);

this.startActivity(intent);

三,接收Activity解析傳遞過來的資料

在onCreate函式的開頭部分解析Bundle封裝的資料

/*           關鍵程式碼             */

Bundle bundle = this.getIntent().getExtras();                 //獲取bundle

String value = bundle.getString("key");                           //獲取key標識的資料

四,啟動其他Activity並返回結果

為了獲取被啟動的Activity返回的結果, 需要做以下兩方面的工作

1. 當前Activity需要重寫onActivityResult(int requestCode, int resultCode, Intent intent), 當被啟動的Activity返回結果時, 該方法將會被觸發;

引數說明:

requestCode: 為了知道該方法是由哪個請求的結果所觸發的;

resultCode: 為了知道返回的資料來自哪個新的Activity。

2. 被啟動的Activity需要呼叫setResult()方法設定處理結果。

/*                       關鍵程式碼                  */

①啟動新的Activity:

startActivityForResult(intent, 0);        // 引數0是請求碼, 用於標識該請求

②重寫當前Activity的onActivityResult()方法, 當被啟動的Activity返回結果時, 該方法被呼叫。

@Override

public void onActivityResult(int requestCode, int resultCode, Intent intent)

{

if(requestCode == 0 && resultCode == 0)   //當requestCode和resultCode同時為0時, 也就是對應上面啟動新的Activity的請求碼時, 處理有特定的結果

{

Bundle bundle = intent.getExtras();      //取出返回結果Intent中的Extras資料

}

}

③新啟動的Activity中返回結果

this.setResult(0, intent);       //0代表呼叫Activity的請求碼, 與前面對應;

                                                  //intent是返回的結果

當被啟動的Activity呼叫setResult()方法時, 呼叫者的onActivityResult()方法被觸發.