具有兼容性包的多个MapFragments

时间:2012-10-24 00:39:05

标签: android android-mapview fragment

我已经创建了一个地图片段,如MapView in a Fragment (Honeycomb)所示,效果很好。

问题是我在以下活动中有另一个地图片段。

活动A有一个占用整个页面的MapFragment。 Activity B的MapFragment只占用了一半的页面(下半部分有一个ListFragment)。两者都工作正常,但是当我单击后退按钮从活动B返回到A时,地图视图只占用了一半页面而页面的下半部分有刷新问题。

mapviews状态也不会独立于另一个保存。例如:从Activty A到Activity B时,地图显示相同的内容。这可以。但是,如果用户在活动B中平移或缩放地图。当用户返回活动A时,地图不会返回到该活动暂停时的位置(这显然不是一个主要问题,因为我可以手动保存状态和重新定位。如果它是为我处理的话会很方便。

这是活动A从活动B返回后的样子 Incorrect Refreshed Mapview

2 个答案:

答案 0 :(得分:1)

你曾告诉过你是否有更好的解决方案 - 现在就有了。 Google发布了Android Maps API v2,为您提供了MapFragment。现在它应该像魅力一样。

答案 1 :(得分:0)

我找到了解决方案,但如果你能找到更好的解决方案,请告诉我。

问题是当活动A被恢复时,它的碎片并不意味着它们永远不会被重绘并保持它在活动B中的大小。

要解决此问题,我必须将以下方法添加到MapFragment并从活动onResume()调用它。这样可以确保调整地图大小以占用最初的空间。 是的,这是一个大规模的黑客攻击,所以如果你找到一种方法来确保正确可靠地创建,销毁和恢复碎片,请在这里发表答案。

/**
 * This method should be called in the activity containing the fragments onResume method
 * to ensure the mapview in this fragment has the expected size.
 *
 * @param width
 * @param height
 */
public void setMapViewSize(int width, int height){
    LayoutParams lp = new LayoutParams(width, height);
    myMapView.setLayoutParams(lp);
}

只是为了澄清,当我说MapFragment时,我说的是扩展MapActivity的类而不是加载包含地图的活动的类(扩展了ActivityHostFragment)。