verursacht einen java.IllegalStateException-Fehler, No Activity, nur beim Navigieren zu Fragment für die ZWEITE Zeit
Ich bin immer eine sehr rätselhafte Fehler, dass ich keine Ahnung habe, wie auch mit der Arbeit beginnen durch.
Habe ich eine einfache app mit einer Aktivität, die Ansichten implementiert, mit Fragmenten. Eines der Fragmente hat einen ViewPager drin; also habe ich beschlossen, dass ich das nutzen wollte getChildFragmentManager Klasse der v4 support library. Ich hatte auch zu verwenden, ActionBarSherlock, die ein problem verursacht, weil es nicht Schiff mit der v11 v4-Bibliothek.
Ich behoben durch den Austausch der v4 support library in ABS mit der v11 Bibliothek, und alles zusammengestellt und erschien zu arbeiten, einschließlich der ViewPager.
Hier ist der seltsame Teil:
Ersten mal das fragment mit dem ViewPager öffnet, es funktioniert; aber das ZWEITE mal ist es aufgerufen, stürzt die app, geben einen nutzlosen stack-trace. Von debugging, entdeckte ich, dass das problem mit der FragmentManager zurückgegeben getChildFragmentManager; es wirft Keine Aktivität Fehler.
Hat jemand eine Idee, was könnte die Ursache sein?
Ich poste code, den Sie denken, ist relevant.
Danke,
David
InformationsquelleAutor der Frage user1743524 | 2013-02-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Folgte ich dem link in jeremyvillalobos Antwort (war sehr hilfreich), dass führte mich zu diese Problemumgehung.
Funktioniert es für mich gut, ohne die Notwendigkeit zu instanziieren, der das fragment.
InformationsquelleAutor der Antwort lopisan
Dies scheint ein bug gemeldet, bei
https://code.google.com/p/android/issues/detail?id=42601
Die variable
FragmentManagerImpl mChildFragmentManager;
In Fragment.java ist nicht auf null gesetzt auf trennen. Also das nächste mal die fragment geladen wird, wird die variable immer noch Punkte, um die letzten Eltern.
Diskutiert, wie in diesem thread, ein workaround ist das instanziieren des Fragments.
In meinem Fall war ich Umschalten zwischen den Fragmenten in eine ActionBar. tab. Die unruhigen Fragment mit verschachtelten Fragmente und stürzt ab die app bei der Rückkehr in die Datei loader-Fragment. Das ist also die Arbeit-rund-code:
InformationsquelleAutor der Antwort jeremyvillalobos
traurig, das es ein bug ist der support v4, immer noch da 🙁
Wenn Sie andere Fragment über die Navigation Schublade oder andere Sache, wie es das fragment die sub-Fragmente getrennt ist. Also diese sub-Fragmente' fragmentManager(getChildFragmentManager()) ist nicht mehr vorhanden. während diese Fragmente zurück, Fehler ist aufgetreten. Bombe!
Offensichtlich, support v4 sollte sauber mChildFragmentManager in onDetach(), hat es aber nicht, also müssen wir selber in der Hand. wie die folgenden codes in das fragment die sub-Fragmente:
Alles OK sein wird, haben Sie einen guten Tag 🙂
InformationsquelleAutor der Antwort Kevin Liu
können Ihre Fehler android.Blick.InflateException?
wenn ja,sollten Sie aufblasen Fragment dynamisch ,nicht mit XML-layout.
und Sie sollten nicht als Ziel-fragment die angegebenen XML-Layout-Fragment Transaktion.
InformationsquelleAutor der Antwort dmnlk
Ich habe das gleiche problem.
In einer Tätigkeit, ich habe 3 bouttons zu wechseln fragment mit der Transaktion.ersetzen Sie(...)
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.layout_tablet_paneau, mLigneMessageFragment);
Einer der in diesem fragment enthalten eine ViewPage mit einem benutzerdefinierten FragmentPagerAdapter. Daher muss ich tun getChildFragmentManager(), sind erlaubt verschachtelte Fragmente.
Konstruktor ist hier:
Also ich habe den gleichen Fehler: Die erste show dieses fragment wrorks, aber wenn ich zeige, andere fragment und gehen Sie zurück auf diese ein, bekomme ich diese exception:
Anstatt also die gleiche Instanz des fragments, ich kann neu erstellen Sie, das also ist es, das problem zu beheben, habe ich aber anscheinend nicht effizient.
InformationsquelleAutor der Antwort Chtiboss
Siehe @lopisan Antwort:
Benutze ich seine Lösung für eine lange Zeit.
ABER ich herausfinden, einen besseren Weg, dies zu tun!
Wenn mChildFragmentManager.mActivity null ist, dann setzen mChildFragmentManager auf null. Wenn performActivityCreated Methode.
InformationsquelleAutor der Antwort 林奕忠
Ich bin stecken geblieben mit dem gleichen Fehler mit BottomNavigationView Schalter und Ersatz-fragment verursacht App Crashs. Mit normaler Geschwindigkeit, es funktioniert völlig in Ordnung, wenn der Benutzer schnell wechseln, es verwendet, zum Absturz zu sagen
in Protokollen
Bevor ich
Ich denke, das pre-Erstellung von fragment-und mit Ihnen war für das ersetzen der schafft das Problem, jetzt habe ich es neu erstellen jedes mal. Es begann fein
Hoffe, dass es hilfreich für einige, ich habe zu viel von defensive coding, aber es löste mein Problem der schnellen Umstellung der Fragmente
InformationsquelleAutor der Antwort Sandeep Tengale
Bitte überprüfen Sie die Nummer 32 dieser link :
Kind FragmentManager beibehalten, nach dem trennen übergeordneten Fragment
Schritte:
InformationsquelleAutor der Antwort TharakaNirmana