Exception in Google Map Fragment in ViewPager mit TabLayout aufblasen

8

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 :

%Vor%

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

    
Moeez 27.01.2017, 14:32
quelle

4 Antworten

11
  

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,

  • Behalten Sie eine statische Ansicht in Ihrem Kartenfragment
  • bei
  • In onCreateView Überprüfe, ob die Ansicht null ist, zum ersten Mal wird sie null sein
  • Wenn es eine Ansicht gibt (nach dem ersten Laden), müssen Sie diese entfernen, so dass jedes Mal, wenn das Fragment aufgerufen wird, es wie beim ersten Mal heißt
  • Dann können Sie Ihre Sicht (Ihre my_location) auf Fragment setzen, so dass Sie kein verschachteltes Fragmentproblem bekommen

Beispiel:

%Vor%

Interessante Antworten finden hier

    
Charuක 31.01.2017, 17:53
quelle
1

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:

    
Daniel Nugent 31.01.2017 20:16
quelle
0

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.

    
Todor Kostov 31.01.2017 13:38
quelle
0

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.

    
Jayant Arora 03.04.2017 05:26
quelle