Question

My map starts as it's supposed to, but the settings for the marker, mapType and zoom never applies in my SupportMapFragment. When I launch the same code in another project, in MainActivity instead, everything works. How do I do to make it work in the SupportMapFragment?

MainActivity (working):

import android.app.Activity;
import android.os.Bundle;
import android.view.View;

import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MainActivity extends Activity {
    private final LatLng BUTIKPLATS = new LatLng(57.873873, 11.974995);

    private GoogleMap karta;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        karta  = ((MapFragment) getFragmentManager().findFragmentById(R.id.karta)).getMap();

        karta.addMarker(new MarkerOptions().position(BUTIKPLATS).title("Vita Fläckens Blommor"));
        karta.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        CameraUpdate update = CameraUpdateFactory.newLatLngZoom(BUTIKPLATS, 17);
        karta.animateCamera(update);
    }


}

SupportMapFragment (Not working):

import android.os.Bundle;
import android.view.View;

import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class Karta extends SupportMapFragment{



    public static Karta newInstance() {
        Karta f = new Karta();
        return f;
    }


private GoogleMap karta;
private final LatLng BUTIKPLATS = new LatLng(57.873873, 11.974995);

public void onCreate(View v, Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
System.out.println("onViewCreated1");

        karta  = ((SupportMapFragment)getFragmentManager().findFragmentById(R.id.kontaktVisaFragment)).getMap();
System.out.println("Karta initierad (.getMap)");        
        if (karta !=null){
System.out.println("Karta != null");            
            karta.addMarker(new MarkerOptions().position(BUTIKPLATS).title("Vita Fläckens Blommor"));
            karta.setMapType(GoogleMap.MAP_TYPE_HYBRID);

            CameraUpdate update = CameraUpdateFactory.newLatLngZoom(BUTIKPLATS, 17);
            karta.animateCamera(update);
        }
    }
}
Was it helpful?

Solution

onCreate() of SupportMapFragment is too soon to be trying to manipulate the GoogleMap, as it does not exist yet. You need to wait to a later point in time, when the GoogleMap object exists, or leave the code where it is in your activity.

onViewCreated() from your previous question should be a better choice than onCreate(). However, I had made things too complicated in my answer. Replace:

karta  = ((SupportMapFragment)getFragmentManager().findFragmentById(R.id.kontaktVisaFragment)).getMap();

with:

karta=getMap();
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top