谷歌地图为Android崩溃在xamarin.forms

时间:2016-06-13 14:43:05

标签: google-maps xamarin.forms

我正在渲染Android的谷歌地图

我第一次使用谷歌地图加载页面时,它可以正常工作,但是当我关闭页面并重新打开它时,我得到了例外:

  

System.NotSupportedException:无法从本机句柄0xcc700019(key_handle 0x433fb7f8)激活SmartScout.Droid.CustomMapRenderer类型的实例。

我发现OnElementChanged中的MapRenderer被调用了两次,第二次因上述异常而崩溃。

我的代码是:

    protected override void OnElementChanged(Xamarin.Forms.Platform.Android.ElementChangedEventArgs<Xamarin.Forms.View> e)
    {
        base.OnElementChanged(e);

        if (e.OldElement != null)
        {
            return;
            //map.InfoWindowClick -= OnInfoWindowClick;
        }

        if (e.NewElement != null)
        {
            var formsMap = (CustomMap)e.NewElement;
            //customPins = formsMap.CustomPins;
            ((MapView)Control).GetMapAsync(this);
        }
    }

任何解决方案?

1 个答案:

答案 0 :(得分:0)

更改此

((MapView)Control).GetMapAsync(this);

并添加此代码

var androidMapView = (MapView)Control;

我的完整工作代码正在关注

    protected override void OnElementChanged(Xamarin.Forms.Platform.Android.ElementChangedEventArgs<View> e)
    {
        base.OnElementChanged(e);


        var formsMap = (ExtendedMap)e.NewElement;

        var androidMapView = (MapView)Control;

        if (androidMapView != null && androidMapView.Map != null)
        {
            androidMapView.Map.InfoWindowClick += MapOnInfoWindowClick;
        }

        if (formsMap != null)
        {
            //code for run first time only
        }

  }