Google Play Service - SupportMapFragment.getMap() always returning null

15,527

As CommonsWare stated in the linked question, the problem only occures when creating the SupportMapFragment programmatically and not a <fragment> XML tag.

If created programmatically, the map will be available in the onActivityCreated() call. So my workaround is the following:

mMapFragment = new SupportMapFragment() {
            @Override
            public void onActivityCreated(Bundle savedInstanceState) {
                super.onActivityCreated(savedInstanceState);
                GoogleMap map = mMapFragment.getMap();
                if (map != null) {
                    //Your initialization code goes here
                }
            }
        };
Share:
15,527

Related videos on Youtube

Goddchen
Author by

Goddchen

Updated on June 04, 2022

Comments

  • Goddchen
    Goddchen almost 2 years

    Possible Duplicate:
    How do I know the map is ready to get used when using the SupportMapFragment?

    I am currently testing the new Maps API V2 but I'm really having trouble getting it to work correclty.

    My problem is that getMap() always returns null.

    I have tested the call in 3 different points:

    1. onCreate()
    2. onResume()
    3. in a Handler that is called some seconds after the map is already visible on the screen

    Here is the code:

    public class MapActivity extends FragmentActivity {
    
    private SupportMapFragment mMapFragment;
    
    @Override
    protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);
                setupMap();
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        setupMap();
        new Handler().postDelayed(new Runnable() {
    
            @Override
            public void run() {
                setupMap();
            }
        }, 5000);
    }
    
    private void setupMap() {
        if (getSupportFragmentManager().findFragmentById(R.id.fragment) == null) {
        mMapFragment = CustomMapFragment.newInstance();
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.map_wrapper, mMapFragment).commit();
        }
        GoogleMap map = mMapFragment.getMap();
        if (map != null) {
            mMapFragment.getMap().getUiSettings().setZoomControlsEnabled(true);
            mMapFragment.getMap().getUiSettings().setZoomGesturesEnabled(true);
            mMapFragment.getMap().setMyLocationEnabled(true);
        }
    }
    

    Anything that I'm doing wrong?