gpt4 book ai didi

android - Xamarin Forms Map Android CustomRenderer MoveToRegion 在升级到 API25 后不工作

转载 作者:行者123 更新时间:2023-11-30 00:30:22 25 4
gpt4 key购买 nike

我刚刚将我的应用程序升级到 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 中初始化。

我找不到原因。请给我任何可能的原因。我会尽一切努力解决这个部队重大问题!

最佳答案

我找到了一个 hack 来解决这个问题。 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 });
}
}

关于android - Xamarin Forms Map Android CustomRenderer MoveToRegion 在升级到 API25 后不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44511223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com