0

是否将Bundle的私人副本传递给Fragment和父母ActivityBundle是否传递onCreate到Activity和Child Fragment不同?

我尝试在onSaveInstanceStateFragment中保存键值对,并尝试在Activity的onCreate中检索它。它缺席那里。

但是这两者之间似乎也有联系。 当我通过nullsuper.onCreateActivityBundle传递给FragmentonCreate也是null

+0

它们是完全不同的。 – xAqweRx

+0

@xAqweRx然后当我将'null'传递给'Activity'的'super.onCreate'时,传递给'Fragment'的'Bundle'也是'null'。为什么这样? – q126y

+0

将代码粘贴到此处。 – xAqweRx

回答

1

Bundle要发送到onCreate对于ActivityFragment是完全不同的。如果您将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(); 
} 
+0

谢谢,我正试图通过'null'因为这个http://stackoverflow.com/q/38727802/5455629 你会好好研究它,并告诉如何解决这个问题。 :) – q126y

相关问题