Android中Activity之間的通訊和傳值
Android 中通過 Intent 物件來表示一條訊息,一個 Intent 物件不僅包含有這個訊息的目的地,還可以包含訊息的內容,通過 Activity. startActivity(intent) 啟動另外一個 Activity ,Intent當作目的地址,Bundle當作所攜帶的內容。
intent直接跳轉啟動到新Activity,也可以帶引數。
btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //第1中方式.開啟新的Activity,不傳遞引數 //新建一個顯式意圖,第一個引數為當前Activity類物件,第二個引數為你要開啟的Activity類 //Intent intent1=new Intent(MainActivity.this,StartActivityForResultActivity.class); //startActivity(intent1); //第2中方式.開啟新的Activity,並傳遞若干個引數給它 //Intent當作目的地址,Bundle當作所攜帶的內容 Intent intent2=new Intent(MainActivity.this,StartActivityForResultActivity.class); Bundle bundle=new Bundle(); bundle.putBoolean("boolean_key", false); bundle.putString("String_key", "apple"); bundle.putDouble("Double_key", 6.66); bundle.putInt("int_key", 20); intent2.putExtra("all_key", bundle); startActivity(intent2); } });
在啟動新的Activity中,取傳過來的數值。
Intent intent = getIntent(); Bundle bunble = intent.getBundleExtra("all_key"); boolean booleanValue = bunble.getBoolean(""); double doubleValue = bunble.getDouble("Double_key"); String stringValue = bunble.getString("String_key"); int intValue = bunble.getInt("int_key"); Log.i("info", "booleanValue"+booleanValue); Log.i("info", "doubleValue"+doubleValue); Log.i("info", "stringValue"+stringValue); Log.i("info", "intValue"+intValue);
列印結果:
通過startActivityForResult(intent, REQUSET)傳值啟動Activity並返回結果:
1.建立Intent物件。
2.啟動指定Activity並等待返回結果,其實請求碼是用來標誌該請求startActivityForResult(intent, REQUSET)。
3.重新onActivityResult(int requestCode, int resultCode, Intent data)接收指定Activity返回的結果。
在指定Activity中:
1.獲取Intent的物件intent。
2.通過intent新增引數,或用Bundle包裝需要返回的資料並put入intnet中。
3.設定該Activity的結果碼,並設定結束之後要返回的Activity: setResult(RESULT_OK, intent)。
4.finish()掉該Activity。
圖a 圖b 圖c
圖a中在StartActivityForResultActivity介面啟動--->進入圖b,在SetResultActivity介面,輸入數值----又返回StartActivityForResultActivity介面,拿到返回的數值,進行顯示。
示例程式碼
StartActivityForResultActivity:
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent=new Intent(StartActivityForResultActivity.this,SetResultActivity.class);
//傳送意圖示 REQUSET=1用來標誌請求一般設定int就行
startActivityForResult(intent, REQUSET);
}
});
在onActivityResult方法中結束下面程式碼傳過來的資料。
若有多個返回請求code,就在下面採用switch分支語句接受不同的請求碼,來進行相應的出來
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
//requestCode標示請求的標示 resultCode表示有資料
if(requestCode==StartActivityForResultActivity.REQUSET&&resultCode==RESULT_OK)
{
String value = data.getStringExtra("key_info");
tv.setText("返回值:"+value);
Log.i("info", "requestCode="+requestCode+";"+"resultCode="+resultCode);
// finish();
}
Toast.makeText(
this,
"requestCode=" + requestCode + ":" + "resultCode=" + resultCode,
Toast.LENGTH_LONG).show();
}
SetResultActivity:btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent=new Intent();
intent.putExtra("key_info", et.getText().toString());
setResult(RESULT_OK, intent);
finish();
}
});