【发布时间】:2015-04-10 20:18:23
【问题描述】:
我为 Xamarin iOS 成功创建了一个 ViewRenderer,现在我正在尝试为 Android 实现一个 Renderer,这是我需要在 Android 中实现的地图:
public class MapViewModel : Map
{
public static readonly BindableProperty LocationsProperty = BindableProperty.Create<MapViewModel, List<Branch>>(x => x.Locations, new List<Branch>());
public static readonly BindableProperty PinTappedCommandProperty = BindableProperty.Create<MapViewModel, Command>(x => x.PinTapped, null);
public MapViewModel(List<Branch> locations)
{
Locations = locations;
PinTapped = new Command(async (x) =>
{
//await Navigation.PopModalAsync();
var info = new InformationView((Branch)x);
await Navigation.PushAsync(info);
});
}
public List<Branch> Locations
{
get { return (List<Branch>)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<MapViewModel, global::Android.Gms.Maps.MapView>
{
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<MapViewModel> 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...
我缺少什么让这个工作?
【问题讨论】:
-
与您的 iOS 实现相比,似乎缺少对 SetNativeControl 的调用。也许你可以研究一下
-
问题是我的 Control 是空的,所以我无法检索 MapView 并用它设置 NativeControl...我一定错过了其他东西。
标签: c# android xamarin xamarin.forms