ARCGis Xamarin - 导航到新页面后显示上一页的MapView

时间:2017-05-21 18:52:12

标签: xamarin arcgis

我有一个“主要”地图页面,用户可以从中向地图添加数据或点击现有数据以查看详细信息。这是通过PushModalAsync()完成的,我导航到一个新页面。我的问题出现在这两个新页面中,我有一个新的Map,新的MapView是从'main'页面“MapView下面”。 MapView和Map本身都是辅助页面上的新对象。

导航到我的新页面后,之前的MapView显示在屏幕区域(在“主页面”上),我的新MapView也存在于该区域中。换句话说,在我的新地图页面上,我的地图布局不同,部分位于布局中比“主”地图更高。位于较高位置的部分是新地图中唯一可见的部分,我可以与之交互。位于同一区域的部分是“主要”地图视图,我无法与之交互,它会阻止我的新地图。

我也尝试使用PushAsync(非模态)并且没有任何改变。如何在一个应用程序中跨多个页面拥有多个地图?这甚至可以用于ArcGIS吗?这个应用曾经与谷歌地图/苹果公司和完全相同的布局工作得很好。

My main map page in yellow is the area where my future map, in a new page, is supposed to display

My new page, with new MapView and new map, covered by previous map

编辑:此处的代码(删除了不相关的部分)此页面从其他页面导航到其上有地图,如果该地图布局在第一个地图的同一区域,则覆盖此地图。在此页面中,我导航到第三页,其中两个地图都显示出来。删除工作成功,但是当我尝试添加时,我收到一条错误消息,说我无法将空子项添加到视图组:

public partial class EventDetails : ContentPage
{
    public Xamarin.Forms.Grid MapGrid = new Xamarin.Forms.Grid()
    {
    RowDefinitions =
    {
        new RowDefinition { Height = 220 },
        new RowDefinition { Height = GridLength.Auto }
    },
    ColumnDefinitions =
    {
        new ColumnDefinition { Width = 500 }
    },
    HorizontalOptions = LayoutOptions.Center
    };
    public Map DetailMap;
    public MapView MyDetailMapView = new MapView();

    public EventDetails(MapLog eventDetails, string strMapType)
    {    
        DetailMap = new Map(BasemapType.ImageryWithLabels, eventDetails.Latitude, eventDetails.Longitude, iMapDetail);
        MyDetailMapView.Map = DetailMap;
        MyDetailMapView.ViewpointChanged += MyMapView_ViewpointChanged;
        var scrollView = new ScrollView
        {
            Content = mainStack
        };
        MapGrid.Children.Add(MyDetailMapView, 0, 0);
        MapGrid.Children.Add(scrollView, 0, 1);
        Content = MapGrid;
    }

#if __ANDROID__ 
protected override void OnAppearing()
{

    if (!MapGrid.Children.Contains(MyDetailMapView))
    {
        try
        {
            MapGrid.Children.Add(MyDetailMapView);
        }
        catch (Exception ex)
        {
            DisplayAlert("Err", ex.Message, "Ok");           
        }

    }
    base.OnAppearing();

 }

protected override void OnDisappearing()
{
    if (MapGrid.Children.Contains(MyDetailMapView))
        MapGrid.Children.Remove(MyDetailMapView);
    base.OnDisappearing();
}
#endif
}

编辑*:我更新了我的Xamarin Forms版本和ARCGIS Runtime,现在删除/添加地图的解决方案确实可以正常运行。

1 个答案:

答案 0 :(得分:1)

我在Xamarin Forms ArcGIS中为Android安装了两张地图时遇到了其他类似问题,解决方法是在导航到新页面时从可视树中删除MapView。
在导航到第二页之前,您需要删除MapView:

[your parent layout].Children.Remove(MyMapView);
await Navigation.PushAsync(new SecondPage());

在您的第一页中,您需要确保在返回页面时将MapView添加回Visual Tree:

    protected override void OnAppearing()
    {
        if (!GridMap.Children.Contains(MyMapView))
            GridMap.Children.Add(MyMapView);
        base.OnAppearing();
    }

用两张地图解决了我所有的问题。感谢ESRI论坛中的这篇文章 Navigation between 2 MapViews in Xamarin Android