2013-03-20 17 views
1

對於我的應用程序,我必須從啓動程序附近獲得一些東西:我必須提供添加,刪除,調整大小和動態拖動某些UI元素(我們稱之爲「小部件」,但它們不是Android AppWidgets)。它工作得很好,但其中一個「小部件」包含一個MapFragment,我無法將它添加兩次,既不能刪除它又不能添加它。Android - 動態添加幾個MapFragments

目前,每個「小部件」都是從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

你有沒有試過給不同的id s到你的不同地圖?

android:id="@+id/map1" 

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

否則,您可以在您的意見中使用setId()

如果有Fragment s工作不工作,你可以在你的XML添加

<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" /> 

,並在代碼中設置它。見Google's Maps V2 DemoRawMapViewDemoActivity的代碼。

對於GC調用,我不用擔心,MapView需要大量內存,並且屏幕旋轉破壞並重新創建所有視圖,所以這是正常的事情。

+0

謝謝你的回答。我嘗試過使用MapViews,它工作正常,但使用MapViews我必須將所有活動生命週期函數轉發給我的「小部件」,這非常煩人:/。 對於片段,我不能給differents ID:我使用相同的XML文件來加載幾個片段。所以在XML中,我無法設置ID,因爲如果我這樣做,它對我所有的片段都是一樣的,而且我不能通過代碼來完成,因爲...我們不能通過代碼設置片段的ID><! ... – 2013-03-20 15:15:43

+0

... 確定爲GC調用...我紅了一些關於API V2和內存泄漏的文章,好像谷歌已經發布它很快(此外,還有,恕我直言,巨大缺乏功能/靈活性: /)。 如果選擇繼續使用MapViews,我會接受你的答案,謝謝! – 2013-03-20 15:16:01