我在Android应用程序中使用Google Maps v2。一切正常,但是如果我离开应用程序(使用主页按钮),使用该设备进行其他操作然后返回我的应用程序,地图会自行重置并丢弃所有设置和听众。
我认为这是因为我的手机没有那么多内存,所以当它需要它来运行其他应用程序时,对我的应用程序至关重要的东西会丢失...如果我在此期间不使用其他应用程序,那么恢复所有设置和听众完整。
所以我有一个成员变量private GoogleMap map = null;
我需要以编程方式创建地图,因为我将其放入LinearLayout
(fragment_wrapper
),我也想将其用于其他片段。所以我在onCreate()
方法中执行此操作:
mapFragment = MapFragment.newInstance();
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.fragment_wrapper, mapFragment);
fragmentTransaction.commit();
地图没有很快初始化,所以我需要在onResume()
方法中设置其设置和监听器:
if (map == null) {
map = mapFragment.getMap();
UiSettings settings = map.getUiSettings();
settings.setMyLocationButtonEnabled(false);
settings.setZoomControlsEnabled(false);
(...)
map.setOnMapClickListener((...));
(...)
}
我最初将 if 块放在那里,以便应用程序不必在恢复时再次设置地图的设置和监听器。但后来我注意到它忘记了设置。所以我想如果我删除了 if 块,它会再次设置地图,因为在恢复应用程序时会调用onResume()
。但它也不起作用......所以所有地图的设置和监听器都消失了,这使得地图变得无用,我的应用程序需要重新启动才能再次设置地图。
有谁能告诉我问题是什么以及如何解决?谢谢。
答案 0 :(得分:4)
我终于能够在Google Maps v2示例代码中找到解决方案,该代码位于<android-sdk-folder>\extras\google\google_play_services\samples\maps\
。见https://developers.google.com/maps/documentation/android/intro#sample_code。帮助我的是文件src\com\example\mapdemo\ProgrammaticDemoActivity.java
。
发生的事情是应用程序完全关闭,因此再次调用其onCreate()
方法。在那里你必须以某种方式找出你是否已经创建了地图片段。解决方案是尝试查找地图片段的标记。如果找不到,则表示活动是第一次运行。您可以创建片段并将标记添加到其中。然后,下次调用onCreate()
时,标记可以找到您的片段,并保留所有设置和监听器。
因此,您可以在活动中设置最终的静态变量:private static final String MAP_FRAGMENT_TAG = "map";
然后在onCreate()
方法中使用此代码:
mapFragment = (MapFragment) getFragmentManager().findFragmentByTag(MAP_FRAGMENT_TAG);
if (mapFragment == null) {
mapFragment = MapFragment.newInstance();
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.fragment_wrapper, mapFragment, MAP_FRAGMENT_TAG);
fragmentTransaction.commit();
}
setUpMapIfNeeded();
这是onResume()
方法:
setUpMapIfNeeded();
setUpMapIfNeeded()
方法可能如下所示:
if (map == null) {
map = mapFragment.getMap();
if (map != null) {
setUpMap();
}
}
(因此地图已在onCreate()
中设置,如果没有,则在onResume()
设置。)
希望这有助于某人。