Вам разрешено иметь только один MapView в MapActivity. - PullRequest
1 голос
/ 07 марта 2011

У меня есть функция, которая показывает страницу карты, чтобы я мог заставить пользователя выбирать свое текущее местоположение.Но если вы дважды запустите эту функцию, это приведет к сбою приложения с одним 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 ]

3 голосов
/ 07 марта 2011

Я думаю, что все были немного правы, это кажется мне недостатком 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);

Это прекрасно работает и дает мне шанс вызвать карту.Спасибо за ответы всем.

0 голосов
/ 13 января 2012

Вот еще одно решение, которое у меня сработало:

FragmentMap + вкладка ActionBar

0 голосов
/ 07 марта 2011

Потому что вы звоните setContentView(R.layout.set_map_center); более одного раза. Зачем вам нужно снова установить contentView? Почему бы не положить его в onCreate?

...