2017-06-13 34 views
1

后我刚刚升级我的应用程序到Android 7.1(API25)和更新的NuGet软件包如下描述下:Xamarin形式地图的Android CustomRenderer MoveToRegion不工作升级到API25

Xamarin.GooglePlayServive.Maps to v42.1021.1 
Xamarin.Forms to v2.3.4.247 
Xamarin.Forms.Maps to v2.3.4.247 
Xamarin.Android.Support.V4 to v25.3.1 
Xamarin.Android.Support.V7.* to v25.3.1 

我得益于一个CustomMap派生于Map类和android CustomRenderer的类。一切都很好,但更新之后,MoveToRegion()方法不会执行任何操作,甚至map也不会初始化传递给ctor的初始MapSpan。

我找不到原因。 请给我任何可能的原因。我会尽力解决这个FORCE MAJOR问题!

+0

是否可以共享一个示例项目演示问题? –

+0

是不是一个已知的错误,我认为这是一个bugzilla报告,在评论中它是一个临时补丁的链接。如果我有时间,我会尽量找到它。 – Digitalsa1nt

+0

@ Digitalsa1nt你找到了什么?我没有。 – Hosein

回答

0

我发现一个黑客现在克服这个问题。 https://forums.xamarin.com/discussion/comment/264930/#Comment_264930

看来,基类我CustomMapRenderer类(Xamarin.Forms.Maps.Android.MapRenderer)的具有实施IOnMapReadyCallback命名OnMapReady它不会被调用的方法。我所要做的就是执行IOnMapReadyCallback,并添加调用InvokeOnMapReadyBaseClassHack(调用基类OnMapReady)的方法OnMapReady:

public void OnMapReady(GoogleMap googleMap) 
{ 
    ... 

    InvokeOnMapReadyBaseClassHack(googleMap); 
} 

private void InvokeOnMapReadyBaseClassHack(GoogleMap googleMap) 
{ 
    System.Reflection.MethodInfo onMapReadyMethodInfo = null; 

    Type baseType = typeof(MapRenderer); 
    foreach (var currentMethod in baseType.GetMethods(System.Reflection.BindingFlags.NonPublic | 
                 System.Reflection.BindingFlags.Instance | 
                 System.Reflection.BindingFlags.DeclaredOnly)) 
    { 

     if (currentMethod.IsFinal && currentMethod.IsPrivate) 
     { 
      if (string.Equals(currentMethod.Name, "OnMapReady", StringComparison.Ordinal)) 
      { 
       onMapReadyMethodInfo = currentMethod; 

       break; 
      } 

      if (currentMethod.Name.EndsWith(".OnMapReady", StringComparison.Ordinal)) 
      { 
       onMapReadyMethodInfo = currentMethod; 

       break; 
      } 
     } 
    } 

    if (onMapReadyMethodInfo != null) 
    { 
     onMapReadyMethodInfo.Invoke(this, new[] { googleMap }); 
    } 
} 
相关问题