2017-05-21 5 views
3

私は、ユーザーがマップにデータを追加するか、既存のデータをクリックして詳細を表示できる「メイン」マップページを持っています。これはPushModalAsync()で行われ、新しいページに移動します。私の問題は、これらの新しいページの両方にあります。私は、新しいMapViewを持つ新しいマップを持っています。これは、「メイン」ページからMapViewの「下に」あります。 MapViewとMapの両方は、セカンダリページ上の新しいオブジェクトです。ARCGis Xamarin - 新しいページにナビゲートした後、前のページのMapViewが表示されます

新しいページに移動した後、以前のMapViewは、新しいMapViewも存在する(メインページの)画面の領域に表示されます。言い換えれば、私の新しい地図ページでは、私の地図はレイアウトが異なっており、部分的にレイアウトが「メイン」マップよりも高くなっています。高いところに座っている部分は、新しい地図のうち唯一見える部分であり、私は対話することができます。同じエリアに座っている部分が「メイン」マップビューで、私はそれと対話できず、新しいマップをブロックします。

私はPushAsyncでもこれを試しましたが(モーダルではありません)、何も変更されていません。 1つのアプリに複数のページにわたって複数の地図を配置する方法はありますか?これはArcGISでも可能ですか?このアプリは以前はGoogle Maps/Appleと同じレイアウトだったが、うまくいきました。

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

編集:(関係ない部分を除去した)コードは、ここにこのページでは、それが同じにレイアウトされている場合は、このマップが覆われていることを特徴とその上のマップで別のページからナビゲートされます最初のマップの領域。このページから、両方の地図が表示される第3ページに移動します。私が追加しようとしたときに削除が正常に動作しますが、しかし私はビュー・グループにヌル子を追加することはできませんというエラーが出ます:

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 
} 

EDIT *:私は私のXamarinは、バージョンとArcGISランタイムと今まで溶液を形成する更新しますマップを削除/追加すると問題なく動作します。

答えて

1

Xamarin Forms ArcGISでアンドロイド用の2つのマップを作成した場合、同様の問題が発生し、新しいページに移動すると、MapViewがビジュアルツリーから削除されていました。あなたがページに戻ってくるときに、ビジュアルツリーに戻すのMapViewを追加することを確認する必要があり

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

そして、あなたの最初のページに:
は、あなたがして第2のページに移動する前のMapViewを削除する必要があります:

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

これは、2つのマップですべての問題を解決しました。 ESRIフォーラムのこのポストのおかげです。 Navigation between 2 MapViews in Xamarin Android

+0

アドバイスをいただきありがとうございます。 修正しても何かを明確にすることはできますか?私のMapViewはXamarin Forms Gridにあり、Gridは私のContentPageのコンテンツです。 グリッドから削除すると消えてしまいますが、再追加しようとするとOnAppearingで "ViewGroupにnull子ビューを追加できません"というエラーが表示されます。 もう一度追加すると、Xamarin Forms Gridに追加し直していますか?私のデバッグでは、GridがnullでもMapViewでもないことがわかります。何か案が? – AlxSeg

+0

はいMapViewをグリッドに追加しています。あなたの質問にあなたのコードを投稿できますか? – Ehsan

+0

コードの下、それは正しく '保護されたオーバーライドボイドOnAppearing(){ 場合の間隔を表示しない理由がわからない申し訳ありません(!MapGrid.Children.Contains(MyDetailMapView)){ MapGrid.Children.Add(MyDetailMapView ); } base.OnAppearing(); }保護オーバーライドボイドOnDisappearing(){ IF(MapGrid.Children.Contains(MyDetailMapView)) MapGrid.Children.Remove(MyDetailMapView)。 base.OnDisappearing(); } ' – AlxSeg

関連する問題