user3548779
user3548779

Reputation: 321

Cannot convert type 'Android.Support.V4.App.Fragment' to 'Android.Gms.Maps.MapFragment'

I am using Xamarin and am recoding a Google Maps application to use Android.Support.V4.App.Fragments with a View Pager.

Here is my code:

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

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

Because I am now extending the Activity to use Android.Support.V4.App.Fragment, I am getting the following errors when compiling:

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

At the line:

_mapFragment = FragmentManager.FindFragmentByTag("map") as MapFragment

As well as:

Error CS0029: Cannot implicitly convert type 'Android.Support.V4.App.FragmentTransaction' to 'Android.App.FragmentTransaction' (CS0029)

At the line:

FragmentTransaction fragTx = FragmentManager.BeginTransaction()

Can I have some help to get this code working?

Thanks in advance

Upvotes: 2

Views: 3852

Answers (2)

Fareya
Fareya

Reputation: 1563

Since you are using Android.Support.V4.App.Fragments instead of using MapFragment at

_mapFragment = MapFragment.NewInstance(mapOptions);

use SupportMapFragment

_mapFragment = SupportMapFragment.NewInstance(mapOptions);

Hope that helps!

You should have android.support.v4.jar in your libs folder and in the project build path

Upvotes: 2

Gabe Sechan
Gabe Sechan

Reputation: 93559

You're mixing classes that use the support library fragments with classes that aren't built off that hierarchy (and work only on 3.0+). You can't do that. You need to use SupportMapFragment instead of map fragment.

Upvotes: 1

Related Questions