我有一个“主要”地图页面,用户可以从中向地图添加数据或点击现有数据以查看详细信息。这是通过PushModalAsync()完成的,我导航到一个新页面。我的问题出现在这两个新页面中,我有一个新的Map,新的MapView是从'main'页面“MapView下面”。 MapView和Map本身都是辅助页面上的新对象。
导航到我的新页面后,之前的MapView显示在屏幕区域(在“主页面”上),我的新MapView也存在于该区域中。换句话说,在我的新地图页面上,我的地图布局不同,部分位于布局中比“主”地图更高。位于较高位置的部分是新地图中唯一可见的部分,我可以与之交互。位于同一区域的部分是“主要”地图视图,我无法与之交互,它会阻止我的新地图。
我也尝试使用PushAsync(非模态)并且没有任何改变。如何在一个应用程序中跨多个页面拥有多个地图?这甚至可以用于ArcGIS吗?这个应用曾经与谷歌地图/苹果公司和完全相同的布局工作得很好。
编辑:此处的代码(删除了不相关的部分)此页面从其他页面导航到其上有地图,如果该地图布局在第一个地图的同一区域,则覆盖此地图。在此页面中,我导航到第三页,其中两个地图都显示出来。删除工作成功,但是当我尝试添加时,我收到一条错误消息,说我无法将空子项添加到视图组:
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,现在删除/添加地图的解决方案确实可以正常运行。
答案 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