Вам разрешено иметь только один MapView в MapActivity.
У меня есть функция, которая показывает страницу карты, чтобы я мог заставить пользователя выбирать свое текущее местоположение. Но если вы запустите эту функцию дважды, это приведет к сбою приложения с одним MapView в ошибке MapActivity (т.е. снова откроется это представление настроек).
public void showMapSetterPage(View v) {
Log.i(DEBUG_TAG, "Settings screen, set map center launched");
// Set which view object we fired off from
set_pv(v);
// Show Map Settings Screen
setContentView(R.layout.set_map_center);
// Initiate the center point map
if (mapView == null) {
mapView = (MapView) findViewById(R.id.mapview);
}
mapView.setLongClickable(true);
mapView.setStreetView(true);
mapView.setBuiltInZoomControls(false);
mapView.setSatellite(false);
mapController = mapView.getController();
mapController.setZoom(18);
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = lm
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
int lat = (int) (location.getLatitude() * 1E6);
int lng = (int) (location.getLongitude() * 1E6);
Log.i(DEBUG_TAG, "The LAT and LONG is: " + lat + " == " + lng);
point = new GeoPoint(lat, lng);
// mapController.setCenter(point);
mapController.animateTo(point);
}
Так что у меня есть кнопка, которая показывает этот вид и onClick="showMapSetterPage". Но если вы вернетесь к экрану настроек вне карты и снова нажмете кнопку, я получу эту ошибку:
03-06 20: 55: 54.091: ОШИБКА /AndroidRuntime(28014): вызвано: java.lang.IllegalStateException: вам разрешено иметь только один MapView в MapActivity.
Как я могу удалить MapView и воссоздать его?
3 ответа
Я думаю, что все были немного правы, это кажется мне недостатком API. Я должен иметь возможность раздувать вид и использовать карту в нем, если я вспомню вид, то смогу удалить его или просмотреть его снова без ошибок.
Самый простой обходной путь состоял в том, чтобы удалить инфляцию или setContentView с использованием xml и перейти к динамической компоновке карты, а затем сохранить ее в памяти.
Я удалил:
// Show Map Settings Screen
setContentView(R.layout.set_map_center);
// Initiate the center point map
if (mapView == null) {
mapView = (MapView) findViewById(R.id.mapview);
}
И заменил его на:
if (mapView == null) {
// public MapView mapView = null; // Public defined Variable
mapView = new MapView(this, this.getString(R.string.APIMapKey));
}
setContentView(mapView);
Это прекрасно работает и дает мне шанс вызвать карту. Спасибо за ответы всем.
Потому что вы звоните setContentView(R.layout.set_map_center);
больше чем единожды. Почему вам нужно снова установить contentView? Почему бы не положить его в onCreate
?
Здесь есть еще одно решение, которое сработало для меня: