Для моего приложения я должен добиться чего-то близкого к пусковой установке: я должен предоставить возможность динамически добавлять, удалять, изменять размер и перетаскивать и перетаскивать некоторые элементы пользовательского интерфейса (назовем их «виджетами», но они не являются Android AppWidgets). Он работает довольно хорошо, но один из этих «виджетов» содержит MapFragment, и я не могу добавить его дважды, ни удалить, ни добавить снова.
На данный момент каждый «виджет» наследуется от FrameLayout. MapFragment загружается из xml. Проблема в том, что мы не можем установить идентификатор фрагмента по коду, и если я сделаю это в xml, у меня, очевидно, будет один и тот же идентификатор для всех моих карт. Итак, я получаю это исключение:
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 ответ
Вы пробовали присвоить разные id
разным картам?
android:id="@+id/map1"
android:id="@+id/map2" // etc...
В противном случае вы можете использовать setId()
на ваши взгляды.
Если работа с 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 Maps V2 Demo RawMapViewDemoActivity
.
Что касается вызовов GC, я бы не стал беспокоиться, MapView
требует много памяти, а поворот экрана уничтожает и воссоздает все ваши представления, так что это нормальное явление.
Похожие вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.