0

我在 Fragment 中显示 GoogleMap。当我旋转屏幕时,地图会重新加载。在 GoogleMaps 应用程序中,地图没有重新加载(地图消失,灰屏并再次出现)

我的代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_map, container,
            false);

    mMapView = (MapView) v.findViewById(R.id.map);
    mMapView.onCreate(savedInstanceState);
    mMapView.onResume();

    if(savedInstanceState == null){
        try {
            MapsInitializer.initialize(getActivity().getApplicationContext());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    if(googleMap == null){
        googleMap = mMapView.getMap();

        //map settings
        googleMap.setMyLocationEnabled(true);
        googleMap.setIndoorEnabled(false);
        googleMap.setTrafficEnabled(false);
        googleMap.getUiSettings().setTiltGesturesEnabled(false);
        googleMap.getUiSettings().setMapToolbarEnabled(false);
    }

    if(savedInstanceState == null) {
        Location myLocation = getMyLocation();

        if (myLocation != null) {
            double myLatitude = myLocation.getLatitude();
            double myLongitude = myLocation.getLongitude();

            CameraPosition cameraPosition = new CameraPosition.Builder().target(new LatLng(myLatitude, myLongitude)).zoom(12).build();
            googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
        }
    }
    return v;
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    mMapView.onSaveInstanceState(outState);
}

// and ofcouse onResume, OnPause, OnCreated and onLowMemory

我的相机位置被保留,但地图没有。它被重新加载,这需要时间并且看起来很难看。如何防止我的地图像谷歌地图应用程序一样重新加载?

我看了一下这个问题,但我不想禁止改变方向。

4

2 回答 2

1

您是否尝试过添加

android:configChanges="orientation|screenSize"

到清单中的活动?

它不一定会锁定方向,它允许 android 尝试自行处理配置更改。

如果这不是你要找的,你可以试着打电话

setRetainInstanceState(true)

在初始化您的片段后,并在定向后恢复时调用数据,但是,很可能因为方向更改会迫使 android 破坏并重新创建您的活动,GoogleMaps 将始终需要重新加载。

于 2015-10-20T15:26:13.580 回答
0

我建议您在 Manifest 文件中的地图活动中将屏幕方向设置为纵向。请参见下面的示例。

        <activity
        android:name=".activity.MapActivity"
        android:label="@string/title_activity_map"
        android:theme="@style/AppTheme"
        android:screenOrientation="portrait"/>

这对我有用

于 2016-06-22T11:49:58.637 回答