【问题标题】:How save state of GoogleMapGoogleMap如何保存状态
【发布时间】:2015-01-05 04:30:24
【问题描述】:

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

我有一个带有 GoogleMap 的片段,当我旋转屏幕时,这张地图会再次重新加载。 例如,如果您打开谷歌地图的应用程序,加载地图,当您旋转屏幕时,地图不会重新加载。但在我的地图中是重新加载(像素化到无像素化)。

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

怎么办?

【问题讨论】:

    标签: android google-maps savestate


    【解决方案1】:

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

    • 扩展 Fragment 类并声明对有状态对象的引用。
    • 在创建片段时调用 setRetainInstance(boolean)。
    • 将片段添加到您的活动中
    • 在 Activity 重新启动时使用 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

    希望这会有所帮助!

    【讨论】:

    • 但我不想丢失的数据在一个片段中,一个带有 GoogleMap 的片段。我将尝试将此解决方案改编为片段。谢谢。
    【解决方案2】:

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

    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
    • 将此行添加到清单中的活动标签中。它适用于与该活动相关的所有片段@hlstras
    • 而且它不会锁定旋转,你也可以旋转。
    • 感谢@Milad,但我需要在该活动中自动轮换,而不是在片段中。活动有更多的片段。我必须就这样离开。
    猜你喜欢
    • 2010-09-14
    • 2022-12-11
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多