2013-04-22 103 views
3

我在Android应用程序中使用Google地图v2。一切工作正常,但如果我离开应用程序(使用主页按钮),使用该设备的其他东西,然后返回到我的应用程序,地图只是重置自己,并放弃我所有的设置和听众。Google地图v2有时会在重新启动应用时重置

我认为这是因为我的手机没有那么多RAM,所以当它需要运行其他应用程序时,对我的应用程序来说至关重要的东西就会丢失......如果我在此期间不使用其他应用程序,它会继续保持所有设置和监听器完好无损。

所以我有可变private GoogleMap map = null;

我需要创建编程,因为我把它变成一个LinearLayoutfragment_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((...)); 
    (...) 
} 

我原本如果在那里阻塞,以便应用程序不必在恢复时再次设置地图的设置和侦听器。但后来我发现它忘记了设置。所以我认为如果我删除了如果块,它会再次设置地图,因为onResume()在应用程序恢复时被调用。但它也不起作用...因此,所有地图的设置和侦听器都消失了,这使得地图无用,而且我的应用需要重新启动才能重新设置地图。

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

回答

4

我终于能够在位于<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()方法再次被调用。在那里你必须找出你是否已经创建了地图片段。解决方法是尝试查找地图片段的标签。如果找不到,则表示该活动是第一次运行。你创建你的片段并添加标签。然后下一次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()。)

希望这可以帮助别人。

相关问题