Использование SupportMapFragment вместо MapFragment

Я использую 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» с помощью преобразования ссылки, преобразования упаковки, преобразования распаковки, преобразования упаковки или преобразования нулевого типа.

Ошибка CS1503: аргумент 2: невозможно преобразовать из «Android.Gms.Maps.SupportMapFragment» в «Android.App.Fragment»

Я почти уверен, что мне нужно использовать SupportFragmentManager, а не FragmentManager, но мне нужна помощь.

ИЗМЕНИТЬ

При попытке использовать SupportFragmentManager я получаю следующую ошибку:

Ошибка CS0103: имя «SupportFragmentManager» не существует в текущем контексте.

заранее спасибо


person user3548779    schedule 12.05.2014    source источник
comment
Вы правы - вам нужно использовать getSupportFragmentManager() и использовать его для получения SupportMapFragment.   -  person Matt O    schedule 12.05.2014
comment
Не могли бы вы взглянуть на мою правку?   -  person user3548779    schedule 12.05.2014
comment
Я никогда не использовал Xamarin, но похоже, что там все немного по-другому, например. нет getSupportFragmentManager(). Эта ссылка может помочь forums.xamarin.com/discussion/14731/ — я бы начал с этого: Android.Support.V4.App.FragmentManager.   -  person Matt O    schedule 12.05.2014


Ответы (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();
    }
}
person Nana Ghartey    schedule 12.05.2014