Bundle是否在onCreate上传递给Activity和Child Fragment不同?

时间:2016-08-03 10:27:15

标签: android android-fragments android-activity activity-lifecycle fragment-lifecycle

Bundle的私人副本是否已传递给Fragment和父Activity

我尝试在onSaveInstanceState的{​​{1}}中保存键值对,并尝试在活动的Fragment中检索它。那里没有。

但两者之间似乎也存在联系。 当我将onCreate传递给null super.onCreate时,传递给Activity Bundle的{​​{1}}也Fragment

1 个答案:

答案 0 :(得分:1)

Bundle已发送至onCreateActivityFragment完全不同。如果您要将null发送给super.onCreate - >活动将从头开始重新创建所有fragments。因此,您的Fragment会收到null - >也。这是新的fragment

这是FragmentActivity的代码的一部分:

/**
 * Perform initialization of all fragments and loaders.
 */
@SuppressWarnings("deprecation")
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    mFragments.attachHost(null /*parent*/);

    super.onCreate(savedInstanceState);

    NonConfigurationInstances nc =
            (NonConfigurationInstances) getLastNonConfigurationInstance();
    if (nc != null) {
        mFragments.restoreLoaderNonConfig(nc.loaders);
    }
    if (savedInstanceState != null) {
        Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG);
        mFragments.restoreAllState(p, nc != null ? nc.fragments : null);

        // Check if there are any pending onActivityResult calls to descendent Fragments.
        if (savedInstanceState.containsKey(NEXT_CANDIDATE_REQUEST_INDEX_TAG)) {
            mNextCandidateRequestIndex =
                    savedInstanceState.getInt(NEXT_CANDIDATE_REQUEST_INDEX_TAG);
            int[] requestCodes = savedInstanceState.getIntArray(ALLOCATED_REQUEST_INDICIES_TAG);
            String[] fragmentWhos = savedInstanceState.getStringArray(REQUEST_FRAGMENT_WHO_TAG);
            if (requestCodes == null || fragmentWhos == null ||
                        requestCodes.length != fragmentWhos.length) {
                Log.w(TAG, "Invalid requestCode mapping in savedInstanceState.");
            } else {
                mPendingFragmentActivityResults = new SparseArrayCompat<>(requestCodes.length);
                for (int i = 0; i < requestCodes.length; i++) {
                    mPendingFragmentActivityResults.put(requestCodes[i], fragmentWhos[i]);
                }
            }
        }
    }

    if (mPendingFragmentActivityResults == null) {
        mPendingFragmentActivityResults = new SparseArrayCompat<>();
        mNextCandidateRequestIndex = 0;
    }

    mFragments.dispatchCreate();
}