Fragment bereits Hinzugefügt. Unterstützung lib
Da habe ich ein Upgrade meiner App zu verwenden support-lib-rev. 11 und kompiliert SDK 4.2, erhalte ich den folgenden Fehler
java.lang.IllegalStateException: Fragment already added: i{4079e598 #2 id=0x1020002 i}
at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1159)
at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:729)
at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1493)
at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:477)
at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:174)
Habe ich gelesen über ähnliche Probleme, die auf stackoverflow. Einige von Ihnen vorschlagen, um zu vermeiden, die replace-Methode, die ich nicht verwende. Die Transaktion, die bewirkt, dass der Absturz auf rollback sieht wie folgt aus:
ft.remove(oldFrag).add(newFrag).addToBackStack(null).commit()
Anderen Kommentaren sagen, dies kann auftreten, wenn Sie mithilfe von fragment-übergänge, die nicht abgeschlossen werden kann schnell genug, bevor der Benutzer drückt wieder zurück.
Da verwende ich übergangsanimationen auf die gegebenen Fragmente, könnte dies die Ursache sein. Allerdings, das entfernen der übergang ist nicht eine Wahl, und da diese ausschließlich tritt auf Handys mit 2.3.x und der bug wurde durch ein Upgrade auf lib 11 und sdk 4.2 ich hoffe google wird es fix mit dem nächsten release.
Hat jemand ähnliche Probleme, Informationen darüber, ob dies geplant ist, behoben in Version 4.2.1 oder Unterstützung r12, oder Vorschläge, was ich tun kann, um die Umgehung der Fehler?
DialogFragment
.Ich bekomme auch mit DialogFragment gelegentlich... ich habe eine Beschwerde eingereicht hat, hier. Aber keine Antwort noch.
habe gleichen Fehler für die Unterstützung der Bibliothek r12. Gepostet Spur zu android-issue-tracker zu.
InformationsquelleAutor phlebas | 2012-12-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich versuche, das Problem zu beheben mit einem Hinweis fand ich hier
Also ich habe executePendingTransactions() sofort die Ausführung der Transaktion:
Dies sollte sicherstellen, dass die backstack ist immer in einem sauberen Zustand, den ich hoffe, und hat keine negativen Nachteile, die ich mir denken kann.
Update
Obwohl es funktioniert auf allen Handys, das Thema bleibt auf einige generische Geräte, die nicht über eine bekannte Android-Version und-Nummer, wie 4.0.1 oder ähnliches, aber statt dessen Bericht ein Datum wie 'Thu Mar 02 2006 00:00:00 GMT+0100 (MEZ)" als Android-Version und-Nummer, e.g: samsung - espressowifixx - GT-P3110-reports das angegebene Datum als android-version und liefert das fragment Hinzugefügt Ausnahme... immer Noch ärgerlich. Die Benutzer kümmern sich nicht um das Zeug, damit es immer die bereits deficitary Entwickler Schuld.
Kein problem für Milliarden-dollar-Unternehmen, natürlich, aber einzelne Entwickler, nur etwas tun, sinnvoll mit Ihrer Zeit als schreib-apps 😉
Können Sie mir empfehlen, sollte ich Bearbeiten FragmentManager.java Klasse in SUpport library
Bitte geben Sie Ihren code bitte.
InformationsquelleAutor phlebas
Also für mich, es stellte sich heraus, dass ich tatsächlich versuchen, fügen Sie ein fragment zweimal. Vielleicht in früheren support-library-Versionen, die es nur Verschlucken diese und zog weiter. Leider ist auch zu prüfen, ob das fragment
isAdded()
hat bei mir nicht funktioniert, da in meinem Fall, ich rief Sie zurück, bevor die Transaktion hatte Zeit, um tatsächlich fügen das erste fragment.Was ich am Ende dabei war die Schaffung eines boolean-Klassenvariable
fragmentAdded
und setzen Sie es auf true sofort, nachdem ich die Transaktion gemacht. Dann überprüfe ich diese boolean, bevor Sie versuchen, um das fragment. Kann nicht sein, eine Lösung für Ihr problem, aber für mich war es, also hoffentlich hilft es.InformationsquelleAutor Jason Robinson