[英]Why does onActivityResult() gets called when the person who is calling it is null?
我花費大量時間試圖弄清楚每次在活動中使用startActivityForResult()
並期望得到結果時onActivityResult()
方法如何被調用。 因此,我進行了深入挖掘,並能夠找到稱為onActivityResult()
。 但是,令我困惑的是who
變量必須為null才能調用onActivityResult()
。 我認為who
變量代表正在返回結果的活動或正在調用結果的活動。 現在,如果who = null
那么為什么要調用onActivityResult(),因為沒有人需要傳遞結果,也沒有任何活動可以生成結果。 那么誰能向我解釋為什么who = null
?
資源
6185 public void dispatchActivityResult(String who, int requestCode,
6186 int resultCode, Intent data) {
6187 if (false) Log.v(
6188 TAG, "Dispatching result: who=" + who + ", reqCode=" + requestCode
6189 + ", resCode=" + resultCode + ", data=" + data);
6190 mFragments.noteStateNotSaved();
6191 if (who == null) {
6192 onActivityResult(requestCode, resultCode, data);
6193 } else {
6194 Fragment frag = mFragments.findFragmentByWho(who);
6195 if (frag != null) {
6196 frag.onActivityResult(requestCode, resultCode, data);
6197 }
6198 }
6199 }
證明誰代表了調用startActivityForResult()的活動。
方法startActivityForResult():
public void startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options) {
3744 if (mParent == null) {
3745 Instrumentation.ActivityResult ar =
3746 mInstrumentation.execStartActivity(
3747 this, mMainThread.getApplicationThread(), mToken, this,
3748 intent, requestCode, options);
3749 if (ar != null) {
3750 mMainThread.sendActivityResult(
3751 mToken, mEmbeddedID, requestCode, ar.getResultCode(),
3752 ar.getResultData());
3753 }
您可以看到execStartActivity具有此功能,這是作為who傳遞給它的當前活動。
public ActivityResult execStartActivity(
1475 Context who, IBinder contextThread, IBinder token, Activity target,
1476 Intent intent, int requestCode, Bundle options)
答案是正確的代碼:如果who
不為null,結果將傳遞到Fragment
而不是Activity
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.