Настройки GoogleMap (addMarker, setMapType и CameraUpdate) не работают в SupportMapFragment

Моя карта запускается, как и предполагалось, но настройки маркера, типа карты и масштабирования никогда не применяются в моем SupportMapFragment. Когда я запускаю тот же код в другом проекте, а не в MainActivity, все работает. Как мне сделать, чтобы он работал в SupportMapFragment?

Основная активность (работает):

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 (не работает):

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

person Sluggo    schedule 16.01.2014    source источник


Ответы (1)


onCreate() из SupportMapFragment слишком рано пытаться манипулировать GoogleMap, так как его еще не существует. Вам нужно дождаться более позднего момента времени, когда объект GoogleMap существует, или оставить код там, где он находится в вашей деятельности.

onViewCreated() из вашего предыдущего вопроса должен быть лучшим выбором, чем onCreate(). Однако в своем ответе я слишком усложнил ситуацию. Заменять:

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

с:

karta=getMap();
person CommonsWare    schedule 16.01.2014
comment
Спасибо еще раз! Ты - ангел! Это работало как с, так и без ((SupportMapFragment)getFragmentManager().findFragmentById(R.id.kontaktVisaFragment)). Я пытался изменить его на onViewCreated раньше, но тогда он разбился. Должно быть, я сделал что-то не так в тот раз. - person Sluggo; 17.01.2014