TabActivity 中的多个地图 v2

Posted

技术标签:

【中文标题】TabActivity 中的多个地图 v2【英文标题】:Multiple maps v2 in TabActivity 【发布时间】:2013-01-13 04:06:34 【问题描述】:

我目前正在尝试使用 MapView 对象在 TabActivity 的不同选项卡中创建 2 个地图 v2。问题出现在以下情况:

显示带有地图的tab1 转到 tab2 以显示另一张地图 在第二个选项卡中,第一个选项卡中的地图图像看起来与新地图重叠。见下图:

在右侧,您可以看到第一张地图仍然显示在其上方。触摸事件将转到新地图,但这并没有真正帮助。我花了很多时间尝试将我们的应用程序转换为使用片段并遇到其他类型的问题。其中之一是http://code.google.com/p/android/issues/detail?id=40035,所以这也不是一个好的选择。

到目前为止,我还没有找到任何解决方法。为了轻松尝试各种更改,我编写了一个简单的应用程序并在此处提供:https://github.com/cristizmf/TestMapsV2。它只需要地图库项目的正确位置和清单中的良好地图键。

任何想法都将不胜感激。

稍后编辑:我为此记录了一个问题:https://code.google.com/p/gmaps-api-issues/issues/detail?id=5027&thanks=5027&ts=1362071369

【问题讨论】:

我注意到您正在使用已弃用的 TabActivity。您是否尝试过改用 ViewPager? ViewPager 与我们当前的设计不匹配,因为它的行为不同。我从兼容性库中尝试了 FragmentTabHost,它没有这个问题,但还有其他问题:) 我发现了同样的问题。我想在片段中提供一个弹出式地图 - 样式类似于对话框。在另一张地图上。我无法在后台删除地图,这对我来说不是一个好的解决方案! :( 这个问题你解决了吗?我面临同样的问题 不,该问题在 Google 的数据库中仍然存在。在此期间,我们更改了应用程序的设计,不再需要这样做,因此我停止寻找解决方法。 【参考方案1】:

我们遇到了完全相同的问题。我怀疑这是由于新地图使用 OpenGL 造成的 - 可能 android 无法同时处理视图层次结构中的两个 OpenGL 小部件,即使其中一个是隐藏的。

我们解决此问题的唯一方法是在离开选项卡时实际删除地图视图,然后构建一个新的并在返回选项卡时将其重新添加。这样可以确保不会同时构建两个地图。

讨厌,但它有效。

【讨论】:

我还尝试在选项卡之间切换时释放地图对象,但在我的情况下没有帮助。最后我们不得不放弃地图,因为它们有很大的内存泄漏。根据我的测试,地图分配的内存永远不会正确释放。我会假设您的解决方案会泄漏,一段时间后应用程序会崩溃。 我们刚刚对内存性能进行了一些广泛的测试——我的解决方案似乎确实存在内存泄漏。幸运的是,在我们的情况下,泄漏是如此缓慢,并且依赖于通过应用程序的如此不寻常的路径,因此我们决定可以忍受它。【参考方案2】:

几天前我遇到了同样的问题,正在为该怎么做而烦恼。

最初,我将我的应用设置为“Tabs the Fragment way”,如 here 所示,以避免弃用的 TabActivity,并使用 this hack 允许我将 Maps v1 与 Fragments 合并。它基本上只是将 Activity 屏蔽为 Fragment。

但为了简单起见,后来切换到 TabActivity 更进一步/它更适合整个应用程序。 但现在显然这个 2x Maps v2 片段问题已经成为一个问题..

所以我已经恢复到“带有片段的选项卡”,并且只为每个选项卡设置了上面提到的“黑客设置”,这允许为每个选项卡设置一个 Activity,并为每个选项卡显示多个 Maps v2 .我没有深入了解它,但它似乎正在完成工作,只是将一些代码放在一起进行测试..

不知道您是否对此仍有疑问/这显然不是最正确的解决方案,但只是想我会分享我的两分钱以防您仍然需要它。

干杯。

【讨论】:

感谢您的评论。我们决定放弃地图 v2,直到有一个稳定的版本。我也在等着看谷歌对我登录的票有什么看法。到目前为止,他们只询问了更多细节。我现在无法测试您的解决方案,它可能会起作用。我不确定内存泄漏(地图现在有足够的内存泄漏),但我想避免使用hacky,因为它们似乎会带来意想不到的问题......至少在地图的情况下。

以上是关于TabActivity 中的多个地图 v2的主要内容,如果未能解决你的问题,请参考以下文章

Android TabActivity 中的奇怪选项菜单行为

Android TabActivity 和动态 Tabs 屏幕方向问题

Android乐学成语之TabHost介绍及使用Fragment 替换 TabActivity

继承的tabactivity怎么用appcompatactivity代替并实现tabactivity的的效果

Android TabActivity用法

现在不推荐使用 TabActivity 使用 Fragments 创建选项卡