0

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

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

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

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

这是 Activity A 从 Activity B 返回后的样子 不正确的刷新地图视图

4

2 回答 2

1

您要求让您知道是否有更好的解决方案 - 现在有。Google 发布了Android Maps API v2,它为您提供了MapFragment. 现在它应该像魅力一样工作。

于 2012-12-06T10:41:01.800 回答
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)。

于 2012-10-24T06:20:47.803 回答