Intereting Posts
Android: HttpsUrlConnection с аутентификатором для базовой проверки подлинности итерации навсегда, когда пароль неверен (на ответ 401) Как я могу контролировать базу данных другого приложения для изменений? Irrlicht android on opengl es 2.0 драйвер Android: автоматически показывать мягкую клавиатуру, когда фокус находится на EditText SetSelection на Spinner на основе rowId Android HttpClient Cookie Android Google Chrome не срабатывает после приложения lockscreen Как я могу избежать выпадающего списка автозаполнения, появляющегося при программном наборе текста? Android: несколько intentservices или один intenservice с несколькими намерениями? Список активов в подкаталоге с помощью AssetManager.list API подключения для Android – не работает для некоторых устройств Android отображает другое диалоговое окно из диалогового окна Какой поток запускает ContentProvider? Ошибка при запуске эмулятора Android: FB :: flushWindowSurfaceColorBuffer: дескриптор окна 0x4 не найден Нажмите на не полностью видимое изображениеБуттон с эспрессо

Сохранение MapFragment (Maps v2) Состояние в Android

Я работаю с новым API GoogleMaps (v2) и имею некоторые проблемы с фрагментом. У меня есть два фрагмента в моем приложении (Карта, Список), и пользователь может переключаться между ними. До сих пор работает с этим кодом:

if (itemPosition == 0) { getSupportFragmentManager().beginTransaction() .replace(R.id.fragmentpos, myMapFragment).commit(); } else if (itemPosition == 1) { getSupportFragmentManager().beginTransaction() .replace(R.id.fragmentpos, myListFragment).commit(); }...... 

Когда я работаю с картой, переключитесь на фрагмент списка, а затем вернитесь к фрагменту карты, последняя позиция карты не будет сохранена. Это не то, что я хочу, я хочу, чтобы карта находилась в состоянии сохранения, так как я «оставил» ее. Как я могу это сделать? Я попытался сохранить положение камеры в

 public void onSaveInstanceState(Bundle outState){ outState.putDouble("LAT", mMap.getCameraPosition().target.latitude); outState.putDouble("LON", mMap.getCameraPosition().target.longitude); outState.putFloat("BEAR", mMap.getCameraPosition().bearing); ... 

}

И восстановить его в onCreateView (), но Bundle всегда имеет значение null. OnSaveInstanceState не вызывается, если я заменяю фрагменты.

Итак, как я могу сохранить состояние карты?

Solutions Collecting From Web of "Сохранение MapFragment (Maps v2) Состояние в Android"

Как я могу это сделать?

Если вы replace() фрагмент, фрагменты старого фрагмента будут уничтожены, что CameraPosition ваш MapView и, предположительно, CameraPosition .

onSaveInstanceState() в основном для изменений конфигурации, таких как экранирование экрана. MapFragment и SupportMapFragment уже сохраняют CameraPosition (который, BTW, является Parcelable , поэтому вы можете сохранить весь объект в Bundle а не по частям).

Вы могли бы рассмотреть использование show() и hide() вместо replace() , чтобы фрагмент и его виды зависали.

Я решил эту проблему, держа ссылку на CameraPosition на карте в onDestroyView() фрагмента; Затем используя это CameraPosition при восстановлении карты.

Контекст моего решения имеет свои собственные причуды, но по существу у меня есть фрагмент карты, вложенный в другой фрагмент (к которому я подключаюсь, даже после его замены). Таким образом, это код в onActivityCreated() родительского фрагмента:

  GoogleMapOptions mapOptions = new GoogleMapOptions(); if(_savedCameraPosition != null) { mapOptions.camera(_savedCameraPosition); } else { // Centre on Australia mapOptions.camera(CameraPosition.fromLatLngZoom(new LatLng(-24.25, 133.25), 15)); } _mapFragment = new SupportMapFragment().newInstance(mapOptions); FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.map_holder, _mapFragment); fragmentTransaction.commit(); 

Затем в том же классе у меня есть:

 @Override public void onDestroyView() { super.onDestroyView(); _savedCameraPosition = _map.getCameraPosition(); }