簡體   English   中英

當調用它的人為null時,為什么會調用onActivityResult()?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM