Android - 动态添加几个MapFragments

时间:2013-03-20 09:18:40

标签: android dynamic mapfragment

对于我的应用程序,我必须从启动器获得一些东西:我必须提供添加,删除,调整大小和动态拖动动态一些UI元素的能力(让我们称之为“小部件”,但它们不是Android AppWidgets )。它工作得很好,但其中一个“小部件”包含一个MapFragment,我无法添加它两次,也不能删除它并再次添加它。

目前,每个“小部件”都是从FrameLayout继承的。 MapFragment是从xml加载的。问题是我们不能通过代码设置Fragment id,如果我在xml中这样做,我的所有地图显然都有相同的id。所以我得到了这个例外:

03-20 09:55:35.078: E/AndroidRuntime(19507):
Caused by: java.lang.IllegalArgumentException:
Binary XML file line #24: Duplicate id 0xffffffff, tag map,
or parent id 0xffffffff with another fragment for
com.google.android.gms.maps.MapFragment

以下是片段的代码:

...
<fragment
    android:tag="map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.MapFragment" />
...

View.inflate(getContext(), layout, R.layout.widget_map);

所以我在这里,完全卡住^^。我已经在没有找到解决方案的情况下搜索了stackoverflow和互联网。

此外,我正在使用Android Maps API V2,每次更改屏幕方向时,我都会在控制台中进行一些GC打印(所以当重绘地图时),我一定要担心吗?

03-20 10:02:41.820: D/dalvikvm(19650): GC_CONCURRENT freed 1929K, 17% free 11579K/13940K, paused 3ms+4ms, total 44ms
03-20 10:02:42.250: D/dalvikvm(19650): GC_CONCURRENT freed 382K, 14% free 12123K/13940K, paused 3ms+13ms, total 67ms
03-20 10:02:42.250: D/dalvikvm(19650): WAIT_FOR_CONCURRENT_GC blocked 51ms
03-20 10:02:42.328: D/dalvikvm(19650): GC_CONCURRENT freed 2114K, 21% free 11099K/13940K, paused 2ms+2ms, total 45ms
03-20 10:02:42.328: D/dalvikvm(19650): WAIT_FOR_CONCURRENT_GC blocked 32ms

欢迎任何建议!

1 个答案:

答案 0 :(得分:0)

您是否尝试过为不同的地图提供不同的id

    android:id="@+id/map1"

    android:id="@+id/map2" // etc...

否则,您可以在视图上使用setId()

如果使用Fragment s不起作用,您可以添加

<com.google.android.gms.maps.MapView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/map1"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
在您的XML中

,并在您的代码中进行设置。请参阅Google's Maps V2 Demo RawMapViewDemoActivity的代码。

对于GC调用,我不担心,MapView需要大量内存,并且屏幕旋转会破坏并重新创建所有视图,因此这是正常的事情。