Google地图v2会阻止地图重新加载轮播

时间:2015-10-20 14:49:18

标签: android google-maps-android-api-2 android-savedstate

我正在片段中显示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

我的相机位置保留,但地图不是。重新加载需要时间并且看起来很难看。如何阻止我的地图像Google地图应用一样重新加载?

我看了this question,但我不想禁止改变方向。

2 个答案:

答案 0 :(得分:1)

您是否尝试过添加

android:configChanges="orientation|screenSize"

清单中的活动?

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

如果这不是您要找的,您可以尝试拨打

setRetainInstanceState(true)

初始化片段后,在定位后恢复时会调用数据,但是,由于方向更改会强制Android销毁并重新创建活动,因此GoogleMaps总是需要重新加载。

答案 1 :(得分:0)

我建议你在Manifest文件中的地图活动中将屏幕Orientation设置为portrait。请参阅以下示例。

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

这对我有用