Xamarin表示Android MapRenderer

我为Xamarin iOS成功创建了一个ViewRenderer,现在我正在尝试为Android实现一个Renderer,这里是我需要在Android中实现的Map:

public class MapViewModel : Map { public static readonly BindableProperty LocationsProperty = BindableProperty.Create<MapViewModel, List>(x => x.Locations, new List()); public static readonly BindableProperty PinTappedCommandProperty = BindableProperty.Create(x => x.PinTapped, null); public MapViewModel(List locations) { Locations = locations; PinTapped = new Command(async (x) => { //await Navigation.PopModalAsync(); var info = new InformationView((Branch)x); await Navigation.PushAsync(info); }); } public List Locations { get { return (List)GetValue(LocationsProperty); } set { SetValue(LocationsProperty, value); } } public Command PinTapped { get {return (Command) GetValue(PinTappedCommandProperty); } set {SetValue(PinTappedCommandProperty, value);} } } 

按照我为iOS做的,我为Android做了这个:

 [assembly: ExportRenderer (typeof (MapViewModel), typeof (MapViewAndroid))] public class MapViewAndroid : ViewRenderer { private global::Android.Gms.Maps.MapView NativeMap {get { return Control; } } public MapViewAndroid () { } protected override void OnElementPropertyChanged (object sender, System.ComponentModel.PropertyChangedEventArgs e) { base.OnElementPropertyChanged (sender, e); } protected override void OnElementChanged (ElementChangedEventArgs e) { base.OnElementChanged(e); var map = e.NewElement; var cmd = map.PinTapped; SetNativeControl(NativeMap); } } 

控件为空,所以我无法正确设置SetNativeControl并在应用程序输出中读取: [art] JNI RegisterNativeMethods: attempt to register 0 native methods for kimo.customersapp.android.MapViewAndroid …我对此缺少什么作品?

Google地图可能需要一些时间来初始化。 您需要等待它完全加载才能使用它。 还要确保挂钩到IOnMapReadyCallback,以便在地图准备好使用时得到通知。

 private GoogleMap NativeMap { get;set;} protected override void OnElementPropertyChanged (object sender, System.ComponentModel.PropertyChangedEventArgs e) { base.OnElementPropertyChanged (sender, e); if (e.PropertyName.Equals ("VisibleRegion")) { var targetElement = (Android.Gms.Maps.MapView)Control; if (NativeMap == null) { targetElement.GetMapAsync (this); } } }