1

私のアプリケーションでは、ランチャーに近いものを実現する必要があります。いくつかの UI 要素を動的に追加、削除、サイズ変更、ドラッグ アンド ドロップする機能を提供する必要があります (「ウィジェット」と呼びますが、Android AppWidget ではありません)。それはかなりうまく機能しますが、これらの「ウィジェット」の1つにMapFragmentが含まれており、2回追加することも、削除して再度追加することもできません.

今のところ、各「ウィジェット」は 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異なるマップに異なるを与えてみましたか?

    android:id="@+id/map1"

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

それ以外の場合は setId()、ビューで使用できます。

sでの作業がFragment機能しない場合は、追加できます

<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のMapsV2Demo RawMapViewDemoActivityのコードを参照してください。

GC呼び出しの場合、心配するMapView必要はありません。大量のメモリが必要です。画面を回転すると、すべてのビューが破棄されて再作成されるため、これは正常な動作です。

于 2013-03-20T09:28:39.343 に答える