Xamarin.Forms.Maps 2.3.4 Custom MapRenderer deaktiviert alles

9

Mein Problem tritt auf, nachdem ich Xamarin.Forms und Xamarin.Forms.Maps auf die neue Version (2.3.4) aktualisiert habe.

Danach habe ich auch alle Google Play-Dienste im Android-Projekt aktualisiert (und viele Bibliotheken, die ich hasse).

Das Hauptproblem besteht darin, dass ich einen benutzerdefinierten MapRenderer für benutzerdefinierte Pins habe, in iOS und UWP funktioniert das gut, aber in der Android-Version erzeugt dieser benutzerdefinierte MapRenderer die gesamte Map. Alle Eigenschaftenänderungen oder Methodenaufrufe werden ignoriert.

Zum Beispiel habe ich eine Schaltfläche, um den Kartentyp (Hybrid oder Street) umzuschalten und diese Aktion ändert sie nie. Ich habe auch bemerkt (nach diesem Tutorial: Ссылка ) ) dass sich die Eigenschaft "VisibleRegion" niemals ändert, so dass der folgende Code nie ausgeführt wird:

%Vor%

Innerhalb dieses if habe ich meine benutzerdefinierten Pins (wie im obigen Tutorial) ausgefüllt und jetzt ist meine Map immer leer.

Jetzt bearbeite ich meine Karte in der IOnMapReadyCallback und es funktioniert gut, aber ich habe immer noch das Bindings Problem.

Wenn ich den benutzerdefinierten MapRendered (Entfernen der Fließbandlinie) ignoriere, fangen alle Bindungen an gut zu funktionieren, aber meine Map hat jetzt die alten Pins und alle Anpassungen sind weg (offensichtlich).

In der PCL habe ich Dinge wie MyMap.MoveToRegion(...) und MyMap.MapType = _currentType; , aber diese Anweisungen funktionieren nur, wenn Sie keinen benutzerdefinierten MapRenderer verwenden.

Mein benutzerdefinierter MapRenderer entspricht fast dem obigen Tutorial.

Die benutzerdefinierte Map wird mit C # und nicht mit XAML erstellt, sie enthält keine XAML-Bindung, aber jeder Eigenschaftsänderungs- oder Methodenaufruf wie MoveToRegion oder MapType wird vollständig ignoriert, wenn ich den MapRenderer verwende.

Irgendwelche Hilfe?

Danke

    
Isaac Ojeda 12.04.2017, 16:28
quelle

2 Antworten

4

Ich habe bereits die Lösung gefunden.

Wenn Sie den Quellcode betrachten, implementiert MapRenderer bereits IOnMapReadyCallback . Wenn Sie die Implementierung im benutzerdefinierten MapRendered entfernen, beginnt alles wieder (aber ohne Anpassung).

MapRenderer speichert die Google Map-Instanz in der Eigenschaft NativeMap (gibt es auch die Eigenschaft Map , die die Xamarin-Forms-Map-Instanz ist), sodass wir IOnMapReadyCallback nicht mehr implementieren müssen. Ich denke, wir müssen bei der Verwendung von NativeMap vorsichtig sein, denn am Anfang könnte es null sein.

In der Methode, die ich vorher erwähnt habe, mache ich das:

%Vor%

und der Code, den ich in OnMapReady hatte, geht jetzt in OnGoogleMapReady() :

%Vor%

Ich habe das auch in OnElementChanged hinzugefügt, um alle registrierten Delegaten in NativeMap

zu entfernen %Vor%

Momentan existiert eine Pull-Anforderung , die OnMapReady als virtuelle Methode implementiert, sodass wir sie überschreiben können in unserer Implementierung und jetzt sicher sein, wenn NativeMap nicht null ist, aber dafür müssen wir auf eine nächste Version warten.

Sie können hier mehr lesen - & gt; Ссылка

    
Isaac Ojeda 12.04.2017, 18:03
quelle
0

Ich habe das gleiche Problem und habe es dank dieser Antwort auf einem Xamarin-Forum.

Dies ist mein Map-Renderer (Android-Teil), um das Bild eines Stiftes zu ersetzen:

%Vor%     
Nicolas Bodin-Ripert 30.05.2017 09:53
quelle

Tags und Links