Ich habe eine App erstellt, in der ich eine Google Map mit GPS-Standortmarkierung an meinem Standort angezeigt habe. Diese Karte befindet sich auf der 1. Registerkarte, und ich habe auch zwei andere Registerkarten, wie im Bild unten gezeigt.
Jetzt habe ich ein Problem, dh wenn ich von Tab 1 zu Tab 2 und dann zu Tab 1 gehe, funktioniert es einwandfrei, aber wenn ich zu Tab 3 gehe und dann zurück zu Tab 1 oder Tab 2 gehe, stürzt die App ab gibt die folgende Ausnahme in LogCat
:
Es zeigt einen Fehler unterhalb des Punktes:
%Vor% Egal, ob ich einen Tab anwähle, es zeigt immer einen Fehler in der obigen Zeile an, dh wenn ich auf meinen pictures
Tab gehe und zurück zum camera
oder my location
Tab komme, zeigt er mir immer den Fehler auf dem über der Linie.
Unten ist mein Layout
%Vor%
Unten ist mein Layout-Code
%Vor%
Ich habe viele Antworten gesucht und gefunden ( 1 , 2 , 3 ), konnten aber keine finden Hilf dabei
Ich bleibe dabei, jede Hilfe wäre willkommen
Hinweis: Sie können ein Layout in einem Fragment bei diesem Layout nicht aufblasen enthält ein & lt; Fragment & gt;.
Verschachtelte Fragmente werden nur unterstützt, wenn sie hinzugefügt werden zu einem Fragment dynamisch.
Das wird Ihr Problem lösen, aber beachten Sie, dass es bessere geben kann,
onCreateView
Überprüfe, ob die Ansicht null ist, zum ersten Mal wird sie null sein Beispiel:
%Vor%Interessante Antworten finden hier
Dieses Problem wird dadurch verursacht, dass ein MapFragment als geschachteltes Fragment des root-ViewPager-Fragments mit der Google Map-Komponente vorhanden ist.
Der sauberste und direkteste Weg, dies zu beheben, ist das Fragment, das direkt in den ViewPager extend SupportMapFragment
geht.
Hier ist ein Arbeitsbeispiel.
Zuerst die Aktivität, die den ViewPager Adapter enthält, der die Google Map auf der ersten Registerkarte anzeigt:
%Vor%activity_main.xml:
%Vor%benutzerdefinierte_tab.xml:
%Vor%Das MapFragment (von meiner anderen Antwort hier ), die SupportMapFragment direkt erweitert und kein xml aufblasen muss Layout:
%Vor%Ergebnis:
Verwenden Sie anstelle eines Fragments für Ihre Karte ein MapView . Es gibt eine Menge Tutorials, wie man das macht.
Ändern Sie auch das Offscreen-Seitenlimit Ihres ViewPagers. Sie können diesen Artikel für weitere Informationen besuchen. Auf diese Weise werden Ihre Registerkarten nicht neu erstellt, wenn sie nicht auf dem Bildschirm angezeigt werden.
Ich respektiere alle Antworten, aber ich fand diese One-Liner-Lösung: Wenn n die Anzahl der Tabs ist, dann:
mViewPager.setOffscopePageLimit (n);
Beispiel: Im Fall erwähnt:
mViewPager.setOffscopePageLimit (2);
View Pager implementiert eine Warteschlange, so dass Sie dieses Fragment nicht entfernen müssen. onCreateView wird nur einmal aufgerufen.