Ich zeige ein leeres Fragment, wenn der Benutzer keine Daten hat. In diesem emptyFragment (in onViewCreated
) suche ich nach einer Bedingung und möchte manchmal dieses leere Fragment durch ein anderes ersetzen, also rufe ich eine Methode auf die entsprechende Aktivität, die das Fragment ersetzt.
Einige Benutzer (derzeit nur Samsung, 6.0.1, aber ich weiß nicht, ob das irgendwas bedeutet) haben einen Absturz in der Zeile, in der ich executePendingTransactions
:
Ist das ein Fehler in 6.0.1 oder ist onViewCreated
der falsche Ort dafür?
BEARBEITEN
Wäre das eine mögliche Lösung?
%Vor%Zuallererst: Warum verschiebst du nicht die "check condition" in deiner Aktivität? Auf diese Weise können Sie entscheiden, welches Fragment Sie benötigen: das eine, das leere Werte verwaltet, oder das andere.
Zweitens: Ich schlage vor, zwei kleine Tutorials zu Fragmenten commit und Staatsverlust . Sie können dort viele Fehlerbedingungen finden, die mit Fragmenten zusammenhängen.
Und schließlich lautet die Antwort zu 'FragmentManager bereits Transaktionen': Es gibt mindestens zwei verschachtelte Aufrufe an die Methode executePendingTransactions()
, dh Sie fragen nach dem Fragmentmanager (es gibt eine einzelne Instanz von Fragment Manager pro Aktivität), um eine Transaktion auszuführen, während eine andere Transaktion ausgeführt wird. Es ist schwer zu identifizieren, wo das Problem liegt. Sie sollten den gesamten Code der Aktivität und alle beteiligten Fragmente veröffentlichen, nur um einen (den ersten) Aufruf von executePendingTransactions zu identifizieren und zu entfernen, aber ich kann Ihnen ein paar Tipps geben:
executePendingTransactions()
. Es ist schwer, einen Code beizubehalten, der eine Art von Orchestrierung zwischen Fragmenten erfordert commit()
, wenn Sie keinen sofortigen Zugriff auf die Fragmente benötigen, die Sie zu Ihrer Aktivität hinzufügen. Das einfache Commit führt alle Transaktionen aus, sobald der Hauptthread frei ist. commitNow()
. Ehrlich gesagt habe ich diese Methode nur wenige Male benutzt, hauptsächlich um DialogFragments korrekt zu handhaben. commitNow()
ist für Pre 24-Geräte verfügbar, wenn Sie die Support-Bibliothek verwenden , die ich Ihnen vorschlagen zu adoptieren.
Tags und Links android android-fragments illegalstateexception fragmentmanager