Ответ Мэтт предлагает работы, но это заставляет карту воссоздаваться и перерисовываться, что не всегда желательно. После многих проб и ошибок я нашел решение, которое работает для меня:
private static View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (view != null) {
ViewGroup parent = (ViewGroup) view.getParent();
if (parent != null)
parent.removeView(view);
}
try {
view = inflater.inflate(R.layout.map, container, false);
} catch (InflateException e) {
/* map is already there, just return view as it is */
}
return view;
}
Для хорошей меры, вот «map.xml» (R.layout.map) с R.id.mapFragment ( android: id = "@ + id / mapFragment"):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapLayout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment" />
</LinearLayout>
Надеюсь, это поможет, но я не могу гарантировать, что он не имеет никаких побочных эффектов.
Изменить: Были некоторые неблагоприятные эффекты, например, при выходе из приложения и повторном запуске. Поскольку приложение не обязательно полностью отключается (но просто укладывается в фоновом режиме), предыдущий код, который я отправил, не смог перезапустить приложение. Я обновил код до чего-то, что работает для меня, идя в & amp; из карты и выхода и перезапуска приложения, я не слишком доволен битком try-catch, но, похоже, он работает достаточно хорошо. При просмотре трассировки стека мне пришло в голову, что я могу просто проверить, есть ли фрагмент карты в FragmentManager, нет необходимости в блоке try-catch, обновлен код.
Дополнительные изменения: оказывается, что вам нужно что try-catch в конце концов. Просто проверка фрагмента карты оказалась не очень хорошей. Blergh.
добавьте в config / initializers / assets.rb
Rails.application.config.assets.precompile += %w( *.js *.es6 *.css )
Rails.application.config.assets.precompile += %w(*.png *.jpg *.jpeg)
, если вы использовали папку vendor или lib, добавьте:
Rails.application.config.assets.paths << Rails.root.join('lib')
Rails.application.config.assets.paths << Rails.root.join('vendor')