void startActivityForResult(Intent intent, int requestCode)
void startActivityForResult(Intent intent, int requestCode, Bundle options)
void onActivityResult(int requestCode, int resultCode, Intent data)
final void setResult(int resultCode)
final void setResult(int resultCode, Intent data)
requestCode 請求碼,即調(diào)用startActivityForResult() 傳遞過去的值
resultCode 結(jié)果碼,結(jié)果碼用于標(biāo)識返回數(shù)據(jù)來自哪個新Activity
二.請求碼的作用
使用startActivityForResult(Intent intent, int requestCode)方法打開新的Activity,我們需要為startActivityForResult()方法傳入一個請求碼(第二個參數(shù))。請求碼的值是根據(jù)業(yè)務(wù)需要由自已設(shè)定,用于標(biāo)識請求來源。例如:一個Activity有兩個按鈕,點(diǎn)擊這兩個按鈕都會打開同一個Activity,不管是那個按鈕打開新Activity,當(dāng)這個新Activity關(guān)閉后,系統(tǒng)都會調(diào)用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那個按鈕打開的,并且要做出相應(yīng)的業(yè)務(wù)處理,這時可以這樣做:
public void onCreate(Bundle savedInstanceState) {
....
button1.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 1);
}
});
button2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 2);
}
});
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode){
case 1:
//來自按鈕1的請求,作相應(yīng)業(yè)務(wù)處理
case 2:
//來自按鈕2的請求,作相應(yīng)業(yè)務(wù)處理
}
}
}
三.結(jié)果碼的作用
在一個Activity中,可能會使用startActivityForResult()方法打開多個不同的Activity處理不同的業(yè)務(wù),當(dāng)這些新Activity關(guān)閉后,系統(tǒng)都會調(diào)用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。為了知道返回的數(shù)據(jù)來自于哪個新Activity,在onActivityResult()方法中可以這樣做(ResultActivity和NewActivity為要打開的新Activity):
public class ResultActivity extends Activity {
.....
ResultActivity.this.setResult(1, intent);
ResultActivity.this.finish();
}
public class NewActivity extends Activity {
......
NewActivity.this.setResult(2, intent);
NewActivity.this.finish();
}
public class MainActivity extends Activity { // 在該Activity會打開ResultActivity和NewActivity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(resultCode){
case 1:
// ResultActivity的返回數(shù)據(jù)
case 2:
// NewActivity的返回數(shù)據(jù)
}
}
}
上面的栗子說明,requestCode 和 resultCode都是返回提出請求的MainActivity結(jié)果處理函數(shù)onActivityResult()使用的標(biāo)識,只是requestCode 主要用來標(biāo)識是MainActivity也就是請求Activity發(fā)出的哪個請求,而resultCode則是標(biāo)識哪個Activity處理并返回的請求。
但是,無論requestCode 還是 resultCode都無法用于處理請求的Activity標(biāo)識是誰發(fā)出的請求。因此需要自行傳遞參數(shù)到處理請求的Activity。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。