Xamarin.Forms и Android - получение результата переключения из другого вида - PullRequest
0 голосов
/ 26 февраля 2019

Я следую учебному пособию по пользовательскому пину, используя Xamarin.Forms, которые я привел ниже.Я закончил реализацию, и я также перешел на добавление булавок на карту, также нажав.

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/map/customized-pin

(примечание: я работаю почти исключительно с Xamarin.Forms и Android)

В настоящее время я могу нажать на карту и новыйТам будет добавлен пользовательский пин-код, и это здорово.Что не очень хорошо, так это то, что я не смог понять, как заставить работать нажатие и долго удерживать жест вместо обычного нажатия.Чтобы попытаться бороться с этим, и потому что мне в конечном итоге придется добавить это в любом случае, я планирую добавить кнопку, которую пользователь может нажать, чтобы инициировать, что он хочет добавить кнопку на карту, и позже я добавлю кнопку отменыи многие другие и т. д.

Проблема в том, что я понятия не имею, как получить результат того, какое состояние моего переключателя находится из пользовательского рендера, который я использую для карты.Где я могу получить результат моей кнопки-переключателя и использовать его как логическое значение для добавления или не добавления кнопки?

Вот код кнопки-переключателя, который я построчно брал из их примера на этой странице:

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/button

Вот код, в который я добавляю пользовательский штифт одним нажатием:

    private void GoogleMap_MapClick(object sender, GoogleMap.MapClickEventArgs e)
    {
        ((CustomMap)Element).OnTap(new Position(e.Point.Latitude, e.Point.Longitude));
        var addingPin = new CustomPin
        {
            Type = PinType.Place,
            Position = new Position(e.Point.Latitude, e.Point.Longitude),
            Address = " - need to possibly implement - ",
            Id = "shelter",
            Label = "Pin from tap",
            Url = "http://www.redcross.org"
        };

        Map.Pins.Add(addingPin);
        this.customPins.Add(addingPin);
    }

Я думал о том, чтобы сделать пользовательскую кнопку рендеринга, нонасколько я знаю, я могу применять только один рендер Android к странице контента за раз, и когда я попытался добавить пользовательский рендеринг кнопки на рендер карты, этот метод был неудовлетворительным, так как он занимал какое-то представление карты Android.а не кнопка просмотра:

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

        if (e.OldElement != null)
        {
            NativeMap.InfoWindowClick -= OnInfoWindowClick;
        }

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

Любая помощь с благодарностью.Ниже я добавил изображение того, как выглядит мое приложение, наряду с пользовательской страницей, которую я также использую.

example

using Hermes.Models;
using System;
using System.Collections.Generic;
using Xamarin.Forms;
using Xamarin.Forms.Maps;

namespace Hermes
{
public class MapPage : ContentPage
{
    public MapPage()
    {
        CustomMap customMap = new CustomMap()
        {
            HeightRequest = 100,
            WidthRequest = 960,
            VerticalOptions = LayoutOptions.FillAndExpand,
            MapType = MapType.Street,
        };

        var examplePinSupplies = new CustomPin
        {
            Type = PinType.Place,
            Position = new Position(42.02525, -93.65087),
            Address = " - need to possibly implement - ",
            Id = "supplies",
            Label = "supplies",
            Url = "https://www.redcross.org/store"
        };

        var examplePinMedical = new CustomPin
        {
            Type = PinType.Place,
            Position = new Position(42.02290, -93.63912),
            Address = " - need to possibly implement - ",
            Id = "medical",
            Label = "medical",
            Url = "http://www.redcross.org"
        };

        var examplePinShelter = new CustomPin
        {
            Type = PinType.Place,
            Position = new Position(42.02045, -93.60968),
            Address = " - need to possibly implement - ",
            Id = "shelter",
            Label = "shelter",
            Url = "http://www.redcross.org"
        };

        customMap.CustomPins = new List<CustomPin> { examplePinSupplies, examplePinMedical, examplePinShelter };
        customMap.Pins.Add(examplePinSupplies);
        customMap.Pins.Add(examplePinMedical);
        customMap.Pins.Add(examplePinShelter);
        customMap.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(42.025250, -93.650870), Distance.FromMiles(1.0)));

        var addPin = new ToggleButton { Text = "Add pin" };

        var buttons = new StackLayout
        {
            Orientation = StackOrientation.Horizontal,
            Children = {
                addPin
            }
        };

        Content = new StackLayout
        {
            Spacing = 0,
            Children = {
                customMap,
                buttons
            }
        };
    }
}
}

Что я пытаюсь сделать: я пытаюсь нажать кнопку переключения «Добавить пин-код», и тогда карта позволитчтобы добавить только один штифт на карту, коснитесь, а затем любые другие последовательные касания, которых нет на другом, не добавят другой штифт на карту.

...