1. startActivityForResult的使用場景是什么雳灾?onActivityResult回調(diào)里面的resultCode和requestCode含義是什么刽酱?
當A activity打開B activity時,需要從B activity返回數(shù)據(jù)給A activity時茂翔,必須調(diào)用startActivityForResult。
requestCode:請求碼。請求碼的值是根據(jù)業(yè)務需求由自己決定辆布,用來標識請求的來源。確定返回的數(shù)據(jù)是來自哪個activity茶鉴。
resultCode:結(jié)果碼锋玲。決定返回結(jié)果的類型,一般為系統(tǒng)默認的RESULT_OK或者RESULT_CANCELED
2. Activity A啟動B的時候涵叮,在B中何時該執(zhí)行setResult 惭蹂?setResult可以位于Activity的finish方法之后嗎?
public final void setResult(int resultCode, Intent data) {
synchronized (this) {
mResultCode = resultCode;
mResultData = data;
}
}
......................
public void finish() {
if (mParent == null) {
int resultCode;
Intent resultData;
synchronized (this) {
resultCode = mResultCode;
resultData = mResultData;
}
if (Config.LOGV) Log.v(TAG, "Finishing self: token=" + mToken);
try {
if (ActivityManagerNative.getDefault()
.finishActivity(mToken, resultCode, resultData)) {
mFinished = true;
}
} catch (RemoteException e) {
// Empty
}
} else {
mParent.finishFromChild(this);
}
}
- 從Activity中看出finish()里的resultCode和resultData的值是在setResult調(diào)用后才獲取的割粮,不然值會為空盾碗。
- 所以setResult一般是在onBackPressed中調(diào)用,而且必須是在super.onBackPressed()之前舀瓢≈枚或者根據(jù)業(yè)務情景,顯示調(diào)用setResult,然后finish()。