对于我的应用程序,我必须从启动器获得一些东西:我必须提供添加,删除,调整大小和动态拖动动态一些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
欢迎任何建议!
答案 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
需要大量内存,并且屏幕旋转会破坏并重新创建所有视图,因此这是正常的事情。