2016-04-29 8 views
0

Ich habe eine AsyncTask, die einige Sachen holt und basierend auf den empfangenen Daten einige Fragmente erstellt. Falls keine Daten zurückgegeben, das tue ich:Entfernen aller Fragmente verursacht Fehler

if (data.size() == 0) { 
    List<Fragment> fragments = getChildFragmentManager().getFragments(); 
    if (fragments != null) { 
     FragmentTransaction txn = getChildFragmentManager().beginTransaction(); 
     for (Fragment fragment : fragments) txn.remove(fragment); 
     txn.commit(); 
    } 
} 

Das Stück Code verursacht „Versuch zu schreiben‚int android.support.v4.app.Fragment.mNextAnim‘auf ein Null-Objekt Bezug auf das Feld“. Irgendeine Idee warum?

dachte ich, dass vielleicht während der Transaktion Gebäude, einige alte Transaktion asynchron anhängig ist, so habe ich

getChildFragmentManager().executePendingTransactions() 

Anruf vor der Transaktion zu bauen. Trotzdem ist der Fehler da.

+0

wo finden Sie Methode ** getFragments() **? – Alexander

+0

sorry, meinte Kind fragment manager, nur die Frage bearbeitet – mpiekarz

+0

welche Methode ist dieser Code Teil von? –

Antwort

1

Normalerweise tritt dieser Fehler auf, wenn Sie versuchen, einen Nullfragmentverweis aus den Transaktionen zu entfernen. Versuchen Sie es also.

if (data.size() == 0) { 
      List<Fragment> fragments = getChildFragmentManager().getFragments(); 
      if (fragments != null) { 
       FragmentTransaction txn = getChildFragmentManager().beginTransaction(); 
       for (Fragment fragment : fragments) { 
        if (fragment != null){ 
         txn.remove(fragment); 
        } 
       } 
       txn.commit(); 
      } 
     } 
+0

funktioniert. Nur neugierig - warum würde getFragments() eine Liste mit Nullen zurückgeben? – mpiekarz

+0

Ich denke für inaktives Fragment werden sie Null Referenz halten. – Krish

Verwandte Themen