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