【发布时间】:2015-01-05 04:30:24
【问题描述】:
我想知道如何保存 GoogleMap 的状态
我有一个带有 GoogleMap 的片段,当我旋转屏幕时,这张地图会再次重新加载。 例如,如果您打开谷歌地图的应用程序,加载地图,当您旋转屏幕时,地图不会重新加载。但在我的地图中是重新加载(像素化到无像素化)。
我知道如何保存Camera 的状态并恢复它,但这不是问题。
怎么办?
【问题讨论】:
标签: android google-maps savestate
我想知道如何保存 GoogleMap 的状态
我有一个带有 GoogleMap 的片段,当我旋转屏幕时,这张地图会再次重新加载。 例如,如果您打开谷歌地图的应用程序,加载地图,当您旋转屏幕时,地图不会重新加载。但在我的地图中是重新加载(像素化到无像素化)。
我知道如何保存Camera 的状态并恢复它,但这不是问题。
怎么办?
【问题讨论】:
标签: android google-maps savestate
由于您使用的是片段,因此除了在 XML 中设置“orientation|screensize”设置之外,您可以在 java 代码中尝试其他选项。
然后使用 FragmentManager 将片段添加到活动中。您可以在运行时配置更改期间再次启动活动时从片段中获取数据对象。
另一种选择是将方向固定为横向或纵向,这将固定屏幕。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}
更多详情请参考link。
希望这会有所帮助!
【讨论】:
当您旋转屏幕时,您的视图会尝试重新加载其数据。您可以检查您的地图是否为空,然后设置您的地图。像这样:
private void setupMapIfNeeded() {
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
if (mMap == null) {
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
}
【讨论】:
Activity,但不适用于Fragment