web-dev-qa-db-fra.com

Remplacer getMap par getMapAsync

Je souhaite remplacer la méthode obsolète getMap par getMapAsync, mais je n'ai pas utilisé MapFragment mais GoogleMap comme ceci:

private GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);

    try {
        if(googleMap == null) {
            googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
        }
        googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        googleMap.setMyLocationEnabled(true);
        googleMap.setTrafficEnabled(true);
        googleMap.setIndoorEnabled(true);
        googleMap.setBuildingsEnabled(true);
        googleMap.getUiSettings().setZoomControlsEnabled(true);

Si je remplace le googleMap par MapFragment comme ceci, je ne serai plus en mesure de setMapType et ainsi de suite. Alors, comment puis-je changer à getMapAsync dans mon cas?

MapFragment mapFragment = (MapFragment) getFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
37
maidi

comme dans le document officiel, obtenir une carte asynchrone nécessite un rappel; c'est là votre "point d'entrée principal" pour Google Maps!

public class MapPane extends Activity implements OnMapReadyCallback {

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

        MapFragment mapFragment = (MapFragment) getFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap map) {
        // DO WHATEVER YOU WANT WITH GOOGLEMAP
        map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        map.setMyLocationEnabled(true);
        map.setTrafficEnabled(true);
        map.setIndoorEnabled(true);
        map.setBuildingsEnabled(true);
        map.getUiSettings().setZoomControlsEnabled(true);
    }
}
61
N Dorigatti

Très simple, il suffit que votre activité implémente l'interface OnMapReadyCallback, puis affectez votre référence googleMap dans le callback onMapReady().

Ensuite, effectuez les actions souhaitées sur googleMap.

Voici un exemple simple:

public class MainActivity extends Activity implements OnMapReadyCallback {

    private GoogleMap googleMap;

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

        MapFragment mapFragment = (MapFragment) getFragmentManager()
                .findFragmentById(R.id.map);

        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap map) {

        googleMap = map;

        setUpMap();

    }

    public void setUpMap(){

        googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        googleMap.setMyLocationEnabled(true);
        googleMap.setTrafficEnabled(true);
        googleMap.setIndoorEnabled(true);
        googleMap.setBuildingsEnabled(true);
        googleMap.getUiSettings().setZoomControlsEnabled(true);
    }


}
34
Daniel Nugent

Si vous utilisez MapFragment, vous pouvez toujours utiliser la méthode stMapType. Implémentez OnMapReadyCallback sur votre activité. Créez MapFragment et appelez la méthode getAsyncMap sur cet objet. Il vous demandera de mettre en œuvre la méthode onMapReady (GoogleMap map) dans laquelle vous pourrez définir le type de carte, etc. J'espère que ça aide.

2
Krishna