我刚刚将我的应用程序升级到Android 7.1(API25)并更新了NuGet包,如下所述:
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
我从一个派生自Map类的CustomMap类和一个android CustomRenderer中受益。之前一切运行良好,但是在更新之后,方法MoveToRegion()没有做任何事情,甚至map也没有在我传递给ctor的初始MapSpan中初始化。
我找不到原因。 请告诉我任何可能的原因。我会尝试任何解决这个FORCE MAJOR问题的事情!
答案 0 :(得分:1)
我现在找到了克服这个问题的黑客攻击。 https://forums.xamarin.com/discussion/comment/264930/#Comment_264930
我的CustomMapRenderer类(Xamarin.Forms.Maps.Android.MapRenderer)的基类似乎有一个实现名为OnMapReady的IOnMapReadyCallback的方法,该方法不会被调用。我所要做的就是实现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 });
}
}