Refre sh загрузка карты для Android - PullRequest
0 голосов
/ 12 января 2020

Я работаю над приложением, в котором пользователь должен находить места. Я использую это для отображения областей с неоткрытыми местами на карте: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/map/circle-map-overlay

Но позже, когда функциональность приложения выросла, она перестала работать хорошо. Вот ссылка на мой github. https://github.com/jakuboles/TDKInz2020/tree/master/TDK

После входа пользователя в систему TDK. Android .CustomMapRenderer.OnElementChanged функция вызывается намного быстрее, чем TDK.MainPage.xaml.cs.DisplayInMap, где я устанавливаю, какие места должны быть показан как обнаруженный, а который как неоткрытый. В результате теперь приложение всегда находится в TDK. Android .CustomMapRenderer.OnElementChanged line 36 список мест всегда будет иметь нулевое значение, а при вызове OnMapReady для рисования кругов список будет нулевым.

Есть ли способ вызвать OnElementChanged еще раз, когда DisplayInMap назначит места для списка? Или сделать OnElementChanged запущенным позже, после того как DisplayInMap установит список.

Извините, если это сложное описание; не знал точно, как правильно описать.

Вот мой Android рендер:

using Android.Content;
using Android.Gms.Maps.Model;
using Java.Lang;
using MapOverlay;
using MapOverlay.Droid;
using System.Collections.Generic;
using TDK.MapsCustoms;
using Xamarin.Forms;
using Xamarin.Forms.Maps.Android;

[assembly: ExportRenderer(typeof(CustomMap), typeof(CustomMapRenderer))]
namespace MapOverlay.Droid
{
    public class CustomMapRenderer : MapRenderer
    {
        List<CustomCircle> circles;

        public CustomMapRenderer(Context context) : base(context)
        {
        }

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



            if (e.OldElement != null)
            {

            }

            if (e.NewElement != null)
            {
                var formsMap = (CustomMap)e.NewElement;
                circles = formsMap.CircleList;
            }
        }

        protected override void OnMapReady(Android.Gms.Maps.GoogleMap map)
        {
            base.OnMapReady(map);

            foreach (var circle in circles)
            {
                var circleOptions = new CircleOptions();
                circleOptions.InvokeCenter(new LatLng(circle.Position.Latitude, circle.Position.Longitude));
                circleOptions.InvokeRadius(circle.Radius);
                circleOptions.InvokeFillColor(0X66FF0000);
                circleOptions.InvokeStrokeColor(0X66FF0000);
                circleOptions.InvokeStrokeWidth(0);

                NativeMap.AddCircle(circleOptions);
            }
        }
    }
}

1 Ответ

0 голосов
/ 13 января 2020

Переместить строку

circles = formsMap.CircleList;

из OnElementChanged в OnMapReady

...