我的应用程序使用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>
答案 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);
}