2015-07-12 47 views
35

更換的GetMap我想getMapAsync更換過時getMap方法,但我沒有用MapFragmentGoogleMap這樣的:與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); 

如果我MapFragment更換googleMap這樣我不是能夠再到setMapType等等。那麼我如何在我的情況下更改爲getMapAsync

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

回答

58

在官方文檔中,獲取地圖異步需要回調; 它是那裏你的谷歌地圖的東西的「主要切入點」!

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

很簡單,只要有你的活動實施OnMapReadyCallback接口,然後分配在onMapReady()回調您googleMap參考。

然後,根據需要對googleMap執行任何操作。

下面是一個簡單的例子:

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

如果使用MapFragment你仍然可以使用stMapType方法。在你的活動上實現OnMapReadyCallback。 在該對象上創建MapFragment並調用getAsyncMap方法。 它會要求你在MapReady(GoogleMap地圖)方法上執行那裏你可以設置地圖類型等。 希望它有幫助。

相關問題