gpt4 book ai didi

android - 恢复应用程序时,谷歌地图 v2 有时会重置

转载 作者:太空宇宙 更新时间:2023-11-03 13:28:40 26 4
gpt4 key购买 nike

我在我的 Android 应用程序中使用 Google Maps v2。一切正常,但如果我离开应用程序(使用主页按钮),使用设备做其他事情然后返回到我的应用程序, map 就会自行重置并丢弃我的所有设置和监听器。

我认为这是因为我的手机没有那么多内存,所以当它需要它来运行其他应用程序时,对我的应用程序至关重要的东西就会丢失......如果我同时不使用其他应用程序,它恢复所有设置和听众完好无损。

所以我有一个成员变量private GoogleMap map = null;

我需要以编程方式创建 map ,因为我将其放入 LinearLayout (fragment_wrapper) 中,我还想将其用于其他 fragment 。所以我在我的 onCreate() 方法中这样做:

mapFragment = MapFragment.newInstance();
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.fragment_wrapper, mapFragment);
fragmentTransaction.commit();

map 不会很快初始化,所以我需要在 onResume() 方法中设置它的设置和监听器:

if (map == null) {  
map = mapFragment.getMap();
UiSettings settings = map.getUiSettings();
settings.setMyLocationButtonEnabled(false);
settings.setZoomControlsEnabled(false);
(...)
map.setOnMapClickListener((...));
(...)
}

我最初将 if block 放在那里,这样应用程序就不必在恢复时再次设置 map 的设置和监听器。但后来我注意到它忘记了设置。所以我想,如果我删除了 if block ,它只会再次设置 map ,因为 onResume() 在应用程序恢复时被调用。但它也不起作用...所以所有 map 的设置和监听器都消失了,这使 map 变得无用,我的应用程序需要重新启动才能重新设置 map 。

任何人都可以告诉我问题可能是什么以及如何解决吗?谢谢。

最佳答案

我终于能够在位于 <android-sdk-folder>\extras\google\google_play_services\samples\maps\ 的 Google Maps v2 示例代码中找到解决方案。 .参见 https://developers.google.com/maps/documentation/android/intro#sample_code .对我有帮助的是文件 src\com\example\mapdemo\ProgrammaticDemoActivity.java .

发生的事情是应用程序完全关闭,所以它是 onCreate()方法再次被调用。在那里你必须以某种方式找出你是否已经创建了 map fragment 。解决方案是尝试找到 map fragment 的标签。如果找不到,说明 Activity 是第一次运行。您创建 fragment 并向其添加标签。然后下一次onCreate()被调用,您的 fragment 可以通过标签找到,所有设置和监听器都被保留。

例如,您可以在 Activity 中设置最终静态变量: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();
}
}

(所以 map 已经在 onCreate() 中设置,如果没有,则在 onResume() 中设置。)

希望这对某人有帮助。

关于android - 恢复应用程序时,谷歌地图 v2 有时会重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16149601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com