2015-07-12 11 views
35

Voglio sostituire il deprecato getMap metodo con getMapAsync, ma non ho usato MapFragment ma GoogleMap come questo:Sostituire getMap con getMapAsync

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

Se si sostituisce la googleMap con MapFragment come questo non sono in grado più a setMapType e così via. Quindi, come posso passare a getMapAsync nel mio caso?

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

risposta

58

come nel documento ufficiale, ottenere la mappa asincrona richiede una richiamata; è lì il tuo "punto di ingresso principale" per le cose di 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); 
    } 
} 
31

molto semplice, basta avere la vostra attività implementi l'interfaccia OnMapReadyCallback, e quindi assegnare il googleMap riferimento nel onMapReady() callback.

Quindi, eseguire qualsiasi azione su googleMap che si desidera.

Ecco un semplice esempio:

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


} 
2

Se si utilizza MapFragment è comunque possibile utilizzare il metodo stMapType. Implementa OnMapReadyCallback sulla tua attività. Creare MapFragment e chiamare il metodo getAsyncMap su quell'oggetto. Vi chiederà di applicare il metodo onMapReady (mappa di GoogleMap) in cui è possibile impostare il tipo di mappa e così via. Spero che aiuti.

Problemi correlati