2016-12-28 8 views
1

アンドロイドマップを使用して指定された住所を検索しようとしています。私は最初に地図上のアドレスを見つけて、それに印を付けることができました。Xamarin.Android:MapFragmentのAndroid.Views.InflateExceptionが2回目に起動しました

バイナリXMLファイルライン#1:エラー膨らまクラスフラグメント

AXMLレイアウト:

<?xml version="1.0" encoding="utf-8"?> 
<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/myMap" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      class="com.google.android.gms.maps.MapFragment" /> 
私は別のアドレスを見つけるしようとすると、しかし、それはフラグメントで例外がスローされます

問題は、フラグメントが2回目に新しいアドレスを見つけるために置き換えられたときに、アンドロイドがaxmlから膨らませることができないということです。これは、ライン上でクラッシュ:

view = inflater.Inflate(Resource.Layout.map_layout, null); 

enter image description here

私はこれらのリンクを経て、しかし、解決策を見つけることができます:

Android map v2 error on second inflating

Android - SupportMapFragment error when openning for second time

https://forums.xamarin.com/discussion/7378/google-maps-wont-work-error-on-fragmenttransaction

私もSupportMapFragmentを使ってみましたが、動作は同じです。

+0

[デモ](https://developer.xamarin.com/samples/これを試してみてくださいMonodroid/MapsAndLocationDemo_v3 /)をMapFragmentでBasicDemoActivityに追加 –

+0

フラグメントトランザクションに関するコードを追加したり、投稿にmvce(http://stackoverflow.com/help/mcve)をアップロードできますか?私の推測では、 'replace()'を使ってフラグメントをスワップしたり、フラグメントを再利用したりしないようにする必要があります。それ以外の場合は、 'fragment'の中に' fragment'がある場合は 'ChildFragmentMananger'を使用する必要があります –

+0

Jon:おそらく、フラグメントを交換するあなたの意見は正しいでしょう。しかし、その代わりに、私は別のやり方を見つけました。私は答えを更新しました。 replace()のこの概念を理解するためのリファレンスを投稿して、フラグメントを再利用してください。 –

答えて

1

最後に、多くを検索した後、解決策が見つかりました。 MapFragmentを使用する代わりに、MapViewを使用しました。次は私のコードです:

AXMLレイアウト:

<?xml version="1.0" encoding="utf-8"?> 
<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/myMap" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      class="com.google.android.gms.maps.MapView" /> 

フラグメントコード:

public class MapViewFragment : Android.Support.V4.App.Fragment, IOnMapReadyCallback 
{ 
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     View view = inflater.Inflate(Resource.Layout.map_layout, null); 
     // Now this line works fine without throwing Inflate Exception 
    } 
} 
+0

あなたのソリューションをありがとう、私のために働いています。 –

関連する問題