2014-10-30 39 views
0

我的应用程序使用Google地图API显示带有一些标记的地图。如果我选择一个标记,应用程序为我提供了根据标记标题打开浏览器到特定URL的可能性。回到应用程序时,我认为它进入了onCreate函数;因此我正在失去状态(例如相机位置),应用程序在浏览之前。有没有办法避免这种或某种备份还原机制?Android - 丢失谷歌地图和网络浏览器之间的数据切换

这里是我的表现,如要求通过@DavidWasser

<uses-sdk 
    android:minSdkVersion="9" 
    android:targetSdkVersion="21" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.INTERNET"/> 
<!-- External storage for caching. --> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<!-- My Location --> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<!-- Maps API needs OpenGL ES 2.0. --> 
<uses-feature 
    android:glEsVersion="0x00020000" 
    android:required="true"/> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:hardwareAccelerated="true"> 

    <meta-data android:name="com.google.android.maps.v2.API_KEY" 
     android:value="xxxxx"/> 
    <meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 
</manifest> 
+0

当返回到应用程序不应该叫'的onCreate( )'再次对你的活动。你一定在做一些奇怪的事情。请张贴您的清单并指出哪些活动是失去状态的活动。 – 2014-10-30 18:03:31

回答

0

我只是看着你的代码,并意识到这不是我换货,看看一个代码如下: 这是如何保存的状态:

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    mapView.onSaveInstanceState(outState); 
} 

以及如何恢复它:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_map_search, container, false); 
    mapView.onCreate(savedInstanceState); 
} 
0

由内activity'sfragment's onSaveInstanceState(Bundle)方法调用它利用MapViews onSaveInstanceState(Bundle)方法。用它来恢复片段的onCreateView()中的MapViews状态。 这应该保存摄像机位置,变焦信息等

记住要遵循documentation(类概述部分)约钩住你的MapViews方法

+0

好的。我要测试它,我会告诉你结果。 – 2014-10-31 13:44:32

+0

好,工作正常。谢谢。 – 2014-10-31 16:59:31

+0

我很高兴听到它的帮助。 如果我的回答对您有帮助,请将其标记为解决方案。 – MatBos 2014-11-01 14:10:50

0

此之后,我(感谢@MatRos)正常工作的代码:

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 

    if (mMap != null) { 
     outState.putParcelable("camera", mMap.getCameraPosition()); 
    } 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
... 
    if(savedInstanceState != null){ 
     CameraPosition savedCameraPosition = savedInstanceState.getParcelable("camera"); 
     if(savedCameraPosition != null){ 
      mMap.animateCamera(CameraUpdateFactory.newCameraPosition(savedCameraPosition)); 
     } 
相关问题