Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ARCGis Xamarin-导航到新页面后显示上一页面的地图视图_Xamarin_Arcgis - Fatal编程技术网

ARCGis Xamarin-导航到新页面后显示上一页面的地图视图

ARCGis Xamarin-导航到新页面后显示上一页面的地图视图,xamarin,arcgis,Xamarin,Arcgis,我有一个“主”地图页面,用户可以从中向地图添加数据或单击现有数据查看详细信息。这是通过PushModalAsync()完成的,在这里我导航到一个新页面。我的问题是,在这两个新页面中,我都有一个新地图,其中一个新地图视图位于“主页”中地图视图的“下方”。地图视图和地图本身都是辅助页面上的新对象 导航到“我的新页面”后,上一个地图视图将显示在屏幕上它存在的区域(在“主页”上),我的新地图视图也存在于该区域。换句话说,在我的新地图页面上,我的地图的布局不同,并且在布局中部分位置高于“主”地图。坐得更高

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

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

我也尝试了PushAsync(非模态),但没有任何改变。如何在一个应用程序中跨多个页面设置多个地图?这在ArcGIS中可能吗?这个应用程序曾经与谷歌地图/苹果(googlemaps/Apple)配合使用,完全相同的布局效果很好

编辑:此处代码(删除不相关的部分)如果该地图位于第一张地图的同一区域,则从另一页导航到该页面,该页面上有一张地图,其中包含该地图。从这一页我导航到第三页,在那里两张地图都显示出来了。删除操作成功,但是,当我尝试添加时,出现一个错误,说明我无法向视图组添加空子级:

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表单版本和ARCGIS运行时,现在删除/添加地图的解决方案可以正常工作

我在Xamarin Forms ArcGIS中有两个android地图时遇到了其他类似的问题,解决方案是在导航到新页面时从可视树中删除地图视图。
在导航到第二页之前,您需要通过以下方式删除地图视图:

[your parent layout].Children.Remove(MyMapView);
await Navigation.PushAsync(new SecondPage());
在第一个页面中,您需要确保在返回页面时将地图视图添加回可视化树:

    protected override void OnAppearing()
    {
        if (!GridMap.Children.Contains(MyMapView))
            GridMap.Children.Add(MyMapView);
        base.OnAppearing();
    }
用两张地图解决了我所有的问题。感谢ESRI论坛上的这篇文章

谢谢你的建议,这绝对有帮助。你能澄清一下你的问题吗。我的MapView位于Xamarin表单网格中,该网格是我的ContentPage的内容。我通过将其从网格中删除使其消失,但当我尝试在出现时重新添加它时,我得到一个错误“无法将空子视图添加到视图组”。当您将其添加回时,是否将其添加回Xamarin表单网格?在我的调试中,我可以看到网格不是空的,MapView也不是空的。知道吗?是的,我正在将地图视图添加到网格中。你能在你的问题中发布你的代码吗?下面的代码,很抱歉不确定为什么它不能正确显示间距
protected override void OnAppearing(){if(!MapGrid.Children.Contains(MyDetailMapView)){MapGrid.Children.Add(MyDetailMapView);}base.OnAppearing();}protected override void OnDisappearing(){if(MapGrid.Children.Contains(MyDetailMapView))MapGrid.Children.Remove(MyDetailMapView);base.OnDisappearing();}
我没有在
OnDisappearing()
中删除MapView,因为在测试时我注意到Xamarin首先触发
OnAppearing())
用于新屏幕,然后调用
OnDisappearing
用于旧屏幕@user2820951I我也尝试过,但它抛出了完全相同的错误。太令人沮丧了。