Как использовать один MapView для нескольких MapActivities - PullRequest
2 голосов
/ 04 января 2012

Я разрабатываю приложение, которое показывает карту на трех различных объектах MapActivities.

Для этого я повторно использую MapFragment в этих трех FragmentActivities, которые расширяют MapActivities с помощью порта Pete Doyle пакета Android Compatibility .

MapView, используемый в этом MapFragment, хранится в прикладном контексте .

Чтобы избежать «у этого представления уже есть родительский элемент» , я удаляю представление из текущего родителя при открытии другого действия:

ViewGroup parentViewGroup = (ViewGroup) app.mapViewContainer.getParent();
if( null != parentViewGroup ) {
  parentViewGroup.removeView(app.mapViewContainer);
}

Все работает хорошо до того момента, когда я нажму кнопку возврата телефона и вернусь к предыдущему MapActivity. В настоящее время MapView полностью черный, так как я удалил его из родительского элемента при смене действий, а кнопка «Назад» не вызывает повторное создание представления ...

Мне известно об этом сообщении: Как использовать несколько MapActivities / MapViews для приложения / процесса Android

На самом деле, у меня появилась идея повторно использовать MapView для разных видов деятельности из ответа Дэнни Ремингтон - MacroSolve дал.

Я не пытался использовать несколько процессов, так как считаю, что решение, которое я пытаюсь реализовать, намного легче в ресурсах.

Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 05 января 2012

Исправлена ​​моя собственная проблема ...

Когда возобновляется MapFragment, мне просто нужно было удалить все виды из фрагмента и из родительского представления карты, а затем добавить вид карты во фрагмент:

@Override
public void onResume() {
    super.onResume();

    resumed++;

    if (resumed > 0) {
        ViewGroup view = (ViewGroup) this.getView();
        view.removeAllViews();

        ViewGroup parentViewGroup = (ViewGroup) app.mapViewContainer.getParent();
        if (parentViewGroup != null) {
            parentViewGroup.removeAllViews();
        }

        view.addView(app.mapViewContainer);
    }
}
...