1

我使用的是Xamarin,我修改了Google Maps API 2樣本,使用SupportMapFragment對象而不是MapFragment對象。使用SupportMapFragment代替MapFragment

我可以幫助InitMapFragment功能。

下面是代碼:

private void InitMapFragment() 
{ 
    _mapFragment = FragmentManager.FindFragmentByTag("map") as SupportMapFragment; 
    if (_mapFragment == null) 
    { 
     GoogleMapOptions mapOptions = new GoogleMapOptions() 
      .InvokeMapType(GoogleMap.MapTypeNormal) 
      .InvokeZoomControlsEnabled(true) 
      .InvokeCompassEnabled(true); 

     FragmentTransaction fragTx = FragmentManager.BeginTransaction(); 
     _mapFragment = SupportMapFragment.NewInstance(mapOptions); 
     fragTx.Add(Resource.Id.mapWithOverlay, _mapFragment, "map"); 
     fragTx.Commit(); 
    } 
} 

曾經是MapFragment類型的_mapFragment,但現在是SupportMapFragment

此外,此刻的活動是從Activity繼承,應該是FragmentActivity還是別的?

下面是我收到的錯誤:

Error CS0039: Cannot convert type 'Android.App.Fragment' to 'Android.Gms.Maps.SupportMapFragment' via a reference conversion, boxing conversion, unboxing conversion, wrapping conversion, or null type conversion

Error CS1503: Argument 2: cannot convert from 'Android.Gms.Maps.SupportMapFragment' to 'Android.App.Fragment'

我敢肯定,我需要使用SupportFragmentManager而非FragmentManager,但想一些幫助,請。

編輯

當嘗試使用SupportFragmentManager,我收到以下錯誤:

Error CS0103: The name 'SupportFragmentManager' does not exist in the current context

在此先感謝

+0

您是對的 - 您需要使用getSupportFragmentManager()並使用它來獲取SupportMapFragment。 –

+0

你能看看我的編輯嗎? – user3548779

+0

我從未使用Xamarin,但看起來事情有點不同,例如,沒有getSupportFragmentManager()。此鏈接可能有助於http://forums.xamarin.com/discussion/14731/fragment-support-fragment-manager-does-not-exist-in-current-context - 我會從這開始:Android.Support.V4 .App.FragmentManager。 –

回答

1

SupportFramgentManager從FragmentActivity繼承,以便確保活動延伸FragmentActivity 。然後修改您的代碼,如下所示:

private void InitMapFragment() 
{ 
    _mapFragment = SupportFragmentManager.FindFragmentByTag("map") as SupportMapFragment; 
    if (_mapFragment == null) 
    { 
     GoogleMapOptions mapOptions = new GoogleMapOptions() 
      .InvokeMapType(GoogleMap.MapTypeNormal) 
      .InvokeZoomControlsEnabled(true) 
      .InvokeCompassEnabled(true); 

     FragmentTransaction fragTx = SupportFragmentManager.BeginTransaction(); 
     _mapFragment = SupportMapFragment.NewInstance(mapOptions); 
     fragTx.Add(Resource.Id.mapWithOverlay, _mapFragment, "map"); 
     fragTx.Commit(); 
    } 
}