如何保存Google Map的状态

时间:2015-01-05 04:30:24

标签: android google-maps savestate

我想知道如何保存GoogleMap的状态

我有一个使用GoogleMap的片段,当我旋转屏幕时,此地图会重新加载。 例如,如果您打开Goog​​le地图应用,请加载地图,当您旋转屏幕时,地图不会重新加载。但是在我的地图中重新加载(像素化为无像素化)。

我知道保存Camera状态的方法并恢复它,但这不是问题。

怎么办?

2 个答案:

答案 0 :(得分:0)

由于您使用的是片段,除了在XML中设置“orientation | screensize”设置外,您可以在java代码中尝试其他几个选项。

  • 扩展Fragment类并声明对有状态对象的引用。
  • 创建片段时调用setRetainInstance(boolean)。
  • 将片段添加到您的活动
  • 使用FragmentManager在重新启动活动时检索片段。

然后使用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

希望这会有所帮助!!

答案 1 :(得分:-1)

当您旋转屏幕时,您的视图正在尝试重新加载其数据。您可以检查地图是否为空,然后设置地图。像这样的东西:

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);
    }
}