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()方法被觸發.