Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中保存MapFragment(Maps v2)状态_Android_Android Fragments_Android Maps_Android Fragmentactivity - Fatal编程技术网

在Android中保存MapFragment(Maps v2)状态

在Android中保存MapFragment(Maps v2)状态,android,android-fragments,android-maps,android-fragmentactivity,Android,Android Fragments,Android Maps,Android Fragmentactivity,我正在使用新的GoogleMapsAPI(v2),但对该片段有一些问题。我的应用程序中有两个片段(地图、列表),用户可以在它们之间切换。到目前为止,此代码可以正常工作: if (itemPosition == 0) { getSupportFragmentManager().beginTransaction() .replace(R.id.fragmentpos, myMapFragment).commit(); } else if (it

我正在使用新的GoogleMapsAPI(v2),但对该片段有一些问题。我的应用程序中有两个片段(地图、列表),用户可以在它们之间切换。到目前为止,此代码可以正常工作:

if (itemPosition == 0) {
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragmentpos, myMapFragment).commit();
    } else if (itemPosition == 1) {
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragmentpos, myListFragment).commit();
}......
当我使用地图时,切换到列表片段,然后返回地图片段,地图的最后位置不会保存。这不是我想要的,我想要地图在我“离开”它时处于保存状态。。 我怎样才能做到这一点?我试着把摄像机的位置保存在

public void onSaveInstanceState(Bundle outState){
   outState.putDouble("LAT", mMap.getCameraPosition().target.latitude);
   outState.putDouble("LON", mMap.getCameraPosition().target.longitude);
   outState.putFloat("BEAR", mMap.getCameraPosition().bearing);
   ...
}

并在onCreateView()中还原该包,但该包始终为空。如果替换片段,则不会调用onSaveInstanceState

那么如何保存地图的状态呢

我怎样才能做到这一点

如果您
replace()
一个片段,旧片段的视图将被销毁,这将删除您的
MapView
,可能还会删除
CameraPosition

onSaveInstanceState()
主要用于配置更改,如屏幕旋转
MapFragment
SupportMapFragment
已经保留了
CameraPosition
(顺便说一句,它是
Parcelable
,因此您可以将整个对象保存在
捆绑包中,而不是零碎保存)


可以考虑使用<代码>显示()>代码>和<代码> HIDED()/>代码>而不是<代码>替换()/>代码>,因此片段及其视图围绕着.< /P> < P>我通过在代码中引用“代码> > OnDeavyVIEW()/<代码>方法来解决这个问题。然后在恢复地图时使用该

CameraPosition

我的解决方案的上下文有它自己的怪癖,但本质上,我有一个嵌套在另一个片段中的映射片段(即使在它被替换之后,我仍然坚持)。这就是父片段的
onActivityCreated()
方法中的代码:

    GoogleMapOptions mapOptions = new GoogleMapOptions();
    if(_savedCameraPosition != null)
    {
        mapOptions.camera(_savedCameraPosition);
    }
    else
    {
        // Centre on Australia
        mapOptions.camera(CameraPosition.fromLatLngZoom(new LatLng(-24.25, 133.25), 15));
    }
    _mapFragment = new SupportMapFragment().newInstance(mapOptions);

    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
    fragmentTransaction.add(R.id.map_holder, _mapFragment);
    fragmentTransaction.commit();
后来在同一节课上,我有:

@Override
public void onDestroyView()
{
    super.onDestroyView();
    _savedCameraPosition = _map.getCameraPosition();
}

你能看看我的问题并告诉我哪里出了问题吗。。这是我的问题-我在使用带有两个MapFragment的show()和hide()时遇到了麻烦。第一个mapfragment正确加载,我可以与之交互。但是,当我切换选项卡时,第二个mapfragment显示与第一个相同的地图视图,其控件不控制视图。当我切换回第一个mapfragment时,控件再次开始工作。我假设第二个mapfragment出于某种原因正在使用第一个mapfragment的曲面视图。有什么线索可以帮我解决这个问题吗?@basilisk:我不知道,没有。对不起!谢谢你的快速回复。我会继续看下去,如果我发现了什么,我会报告回来。我确信的是它的视图,因为第二个片段上的缩放控件会像它们应该的那样激活和停用(缩放按钮开始停用,在我单击放大按钮时激活,在我单击缩小按钮时再次停用)。在使用多个地图片段时,mapfragment没有正确显示和隐藏,我也遇到了同样的问题。如果我找到了解决这个问题的方法,我会发帖的,但也许应该是在另一个问题上,集中在这个问题上。