MapView во фрагменте (соты) - PullRequest
       84

MapView во фрагменте (соты)

81 голосов
/ 24 февраля 2011

Теперь, когда окончательный SDK вышел с Google API - каков наилучший способ создания фрагмента с MapView? Для правильной работы MapView необходим MapActivity.

Наличие действия, управляющего фрагментами, наследуется от MapActivity (плохое решение, поскольку оно противоречит идее, что фрагменты являются автономными) и использование обычного макета на основе xml не работает. Я получаю исключение NullPointerException в MapActivity.setupMapView ():

E/AndroidRuntime(  597): Caused by: java.lang.NullPointerException
E/AndroidRuntime(  597):    at com.google.android.maps.MapActivity.setupMapView(MapActivity.java:400)
E/AndroidRuntime(  597):    at com.google.android.maps.MapView.(MapView.java:289)
E/AndroidRuntime(  597):    at com.google.android.maps.MapView.(MapView.java:264)
E/AndroidRuntime(  597):    at com.google.android.maps.MapView.(MapView.java:247)

Моя вторая идея состояла в том, чтобы программно создать MapView и передать ассоциированное действие (через getActivity ()) в качестве контекста конструктору MapView. Не работает:

E/AndroidRuntime(  834): Caused by: java.lang.IllegalArgumentException: MapViews can only be created inside instances of MapActivity.
E/AndroidRuntime(  834):    at com.google.android.maps.MapView.(MapView.java:291)
E/AndroidRuntime(  834):    at com.google.android.maps.MapView.(MapView.java:235)
E/AndroidRuntime(  834):    at de.foo.FinderMapFragment.onCreateView(FinderMapFragment.java:225)
E/AndroidRuntime(  834):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:708)
E/AndroidRuntime(  834):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:900)
E/AndroidRuntime(  834):    at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:978)
E/AndroidRuntime(  834):    at android.app.Activity.onCreateView(Activity.java:4090)
E/AndroidRuntime(  834):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:664)

На самом деле должно быть что-то вроде MapFragment, которое заботится о фоновых потоках, в которых MapView нуждается, я полагаю ... Итак, какова текущая лучшая практика для этого?

Спасибо и привет из Германии, Валентин

Ответы [ 12 ]

1 голос
/ 11 марта 2012

Это решает мою проблему при добавлении MapView во фрагментах.https://github.com/petedoyle/android-support-v4-googlemaps

0 голосов
/ 29 августа 2012

Я написал небольшую библиотеку, разбирающую решения на основе LocalActivityManager для проблемы MapFragment (также включает пример приложения, показывающего различные ситуации использования):

https://github.com/coreform/android-tandemactivities

...