1

对于我的应用程序,我必须从启动器附近实现一些东西:我必须提供动态添加、删除、调整大小和拖放一些 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

任何的建议都受欢迎 !

4

1 回答 1

0

您是否尝试过为不同id的地图赋予不同的 s?

    android:id="@+id/map1"

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

否则,您可以使用 setId()您的意见。

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

<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 的 Maps V2 Demo RawMapViewDemoActivity的代码。

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

于 2013-03-20T09:28:39.343 回答