1. startActivityForResult的使用場景是什麼?onActivityResult回撥裡面的resultCode和requestCode含義是什麼?
-
當A activity開啟B activity時,需要從B activity返回資料給A activity時,必須呼叫startActivityForResult。
-
requestCode:請求碼。請求碼的值是根據業務需求由自己決定,用來標識請求的來源。確定返回的資料是來自哪個activity。
-
resultCode:結果碼。決定返回結果的型別,一般為系統預設的RESULT_OK或者RESULT_CANCELED
2. Activity A啟動B的時候,在B中何時該執行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呼叫後才獲取的,不然值會為空。
- 所以setResult一般是在onBackPressed中呼叫,而且必須是在super.onBackPressed()之前。或者根據業務情景,顯示呼叫setResult,然後finish()。