2015-07-12 14 views
35

Chcę, aby zastąpić przestarzałe getMap Method z getMapAsync, ale nie używałem MapFragment ale GoogleMap takiego:Wymień GetMap z 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); 

Gdybym wymienić googleMap z MapFragment tak nie jestem stanie już do setMapType i tak dalej. Więc jak mogę zmienić w moim przypadku na getMapAsync?

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

Odpowiedz

58

jak w oficjalnym dokumencie, pobierz asynchronię mapy wymaga oddzwonienia; to tam jest twój "główny punkt wejścia" do map Google.

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

bardzo proste, wystarczy mieć swoją aktywność implementować interfejs OnMapReadyCallback, a następnie przypisać swoje odniesienie w onMapReady() zwrotnego googleMap.

Następnie wykonaj dowolne czynności na stronie googleMap, które chcesz.

Oto prosty przykład:

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

Jeśli używasz MapFragment nadal można użyć metody stMapType. Zaimplementuj OnMapReadyCallback w swojej działalności. Utwórz funkcję MapFragment i wywołaj metodę getAsyncMap dla tego obiektu. Zostaniesz poproszony o dodanie metody onMapReady (GoogleMap map), w której możesz ustawić typ mapy i tak dalej. Mam nadzieję, że to pomaga.