在Android中保存MapFragment(Maps v2)状态
我正在使用新的GoogleMapsAPI(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
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没有正确显示和隐藏,我也遇到了同样的问题。如果我找到了解决这个问题的方法,我会发帖的,但也许应该是在另一个问题上,集中在这个问题上。