0

Личный экземпляр Bundle передан Fragment и родительскому Activity?Является ли Пакет включенным onCreate to Activity и Child Fragment другим?

Я пытаюсь сохранить ключ, значение пары в onSaveInstanceState из Fragment и попытаться получить его в onCreate деятельности. Он отсутствует.

Но также существует связь между ними. Когда я проходил null до super.onCreate от ActivityBundle, перешел на FragmentonCreate также является null.

+0

Они совершенно разные. – xAqweRx

+0

@xAqweRx тогда, когда я передаю 'null' в' super.onCreate' 'Activity',' Bundle', переданный 'Fragment', также является' null'. Почему это так? – q126y

+0

вставьте свой код здесь. – xAqweRx

ответ

1

Bundle, который отправляется onCreate для Activity и Fragment, полностью отличается. Если вы отправляете 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

Спасибо, я пытался передать «нуль» из-за этого http://stackoverflow.com/q/38727802/5455629 Не могли бы вы так заглянуть в него и рассказать, как решить эту проблему. :) – q126y