Заменить getMap с помощью getMapAsync
Я хочу заменить устаревший метод getMap
на getMapAsync
, но я не использовал MapFragment
, но GoogleMap
следующим образом:
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);
Если я заменил GoogleMap
на MapFragment
следующим образом, я больше не могу setMapType
и так далее. Итак, как я могу изменить на getMapAsync
в моем случае?
MapFragment mapFragment = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
Ответы
Ответ 1
как в официальном документе, для получения асинхронной карты требуется обратный вызов;
там есть ваша "главная точка входа" для 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);
}
}
Ответ 2
Очень просто, просто выполните свою деятельность с интерфейсом OnMapReadyCallback
, а затем назначьте ссылку googleMap
в обратном вызове onMapReady()
.
Затем выполните любые действия на 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);
}
}
Ответ 3
Если вы используете MapFragment, вы все равно можете использовать метод stMapType. Внесите OnMapReadyCallback в свою деятельность.
Создайте MapFragment и вызовите метод getAsyncMap для этого объекта.
Он попросит вас добавить метод onMapReady (GoogleMap map) там, где вы можете установить тип карты и так далее.
Надеюсь, что это поможет.