Android - 在谷歌地图和网络浏览器之间丢失数据切换

时间:2014-10-30 17:41:53

标签: android google-maps android-intent oncreate

我的应用程序使用Google地图API显示包含一些标记的地图。如果我选择一个标记,该应用程序使我可以根据标记的标题打开浏览器到特定的URL。当回到应用程序时,我认为它进入了onCreate函数;结果我在浏览之前丢失了应用程序的状态(例如相机位置)。有没有办法避免这种或某种备份恢复机制?

这是我的清单,正如@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>

3 个答案:

答案 0 :(得分:0)

通过onSaveInstanceState(Bundle)activity's方法调用MapViews fragment's onSaveInstanceState(Bundle)方法。用它来恢复片段onCreateView()中的MapViews状态。 这应该可以保存相机位置,缩放信息等。

请记住关注挂钩MapViews方法的documentation(课程概述部分)

答案 1 :(得分: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));
        }

答案 2 :(得分: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);
}