0

Wird eine private Kopie von Bundle an Fragment und die übergeordnete Activity übergeben?Ist das Bundle onCreate zu Activity und Child Fragment unterschiedlich?

Ich versuche, Schlüssel, Wert-Paar in onSaveInstanceState von Fragment zu speichern und versuchen, es in der onCreate Aktivität abrufen. Es ist dort abwesend.

Aber es scheint auch eine Verbindung zwischen den beiden zu geben. Wenn ich null an von Activity übergebe, wird die Bundle an Fragment übergeben. onCreate ist auch null.

+0

Sie sind völlig verschieden. – xAqweRx

+0

@xAqweRx dann, wenn ich 'null' zu' super.onCreate' von 'Activity' übergebe, ist das' Bundle', das an 'Fragment' übergeben wird, ebenfalls' null'. Wieso ist es so? – q126y

+0

Fügen Sie hier Ihren Code ein. – xAqweRx

Antwort

1

Bundle, die an onCreate für Activity und Fragment gesendet wird, sind völlig unterschiedlich. Wenn Sie null an senden -> Aktivität wird alle fragments von Grund auf neu erstellen. So wird Ihre Fragment erhalten null -> auch. Ursache ist NEW fragment


Dies ist ein Teil des Codes von 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

Danke, ich habe versucht, 'null' zu übergeben wegen dieser http://stackoverflow.com/q/38727802/5455629 Würdest du so freundlich sein, es zu untersuchen und zu erzählen, wie man dieses Problem löst. :) – q126y

Verwandte Themen