我正在使用Xamarin,并且我已修改Google Maps API 2示例以使用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还是其他?

这是我得到的错误:


  错误CS0039:无法将类型“ Android.App.Fragment”转换为
  通过参考转换的“ Android.Gms.Maps.SupportMapFragment”,
  装箱转换,拆箱转换,换行转换或null
  类型转换
  
  错误CS1503:参数2:无法从中转换
  'Android.Gms.Maps.SupportMapFragment'到'Android.App.Fragment'


我很确定我需要使用SupportFragmentManager而不是FragmentManager,但是需要一些帮助。

编辑

尝试使用SupportFragmentManager时,出现以下错误:


  错误CS0103:名称'SupportFragmentManager'在
  当前背景


提前致谢

最佳答案

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();
    }
}

关于android - 使用SupportMapFragment而不是MapFragment,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23604536/

10-10 16:38