2012-12-07 24 views
5

Marker nie implementuje interfejsów Parcelable, Serializable, ale muszę go utrzymywać między Aktywnością /onResume, więc jak mogę to utrzymać? Jak mogę uzyskać wszystkie aktualne listy Markerów (nie mogę znaleźć metody getMarkers() w dowolnym miejscu)?Jak utrzymać Marker z Google API Android v2?

Wyobraź sobie następny przypadek: dodałem Marker i rozpocząłem AsyncTask, aby wykonać długo działające zadanie i aktualizować widok znacznika. Zadanie jest w toku i zmieniam orientację, aktywność jest odtwarzana. Jak mogę zaktualizować ten znacznik po zakończeniu zadania? Wyobraźmy sobie, że mogę zachować identyfikator Markera i Markery są automatycznie zapisywane przez fragment (po prostu wyobraź sobie), to jak mogę go znaleźć za pomocą id po odtworzeniu aktywności?

Odpowiedz

4

Marker s nie są częścią „państwa UI”, a zatem nie powinny być zapisane/przywrócone na zmianę konfiguracji.

Po zmianie konfiguracji wystarczy odtworzyć wszystkie Marker s przy użyciu dokładnie tego samego kodu, który został użyty do wypełnienia GoogleMap przy pierwszym wyświetleniu.

Jeśli naprawdę chcesz je utrzymywać (co jest naprawdę zły pomysł z mojego punktu fo widzenia), jest to nadal możliwe robić to ręcznie w onSaveInstance(Bundle outState)


EDIT: Zobacz "Deep Dive Into Android State Restoration"

+1

Marker jest częścią interfejsu użytkownika i zawiera ikonę, tytuł, fragment i właściwości widoczności. Wyobraźmy sobie, że ten fragment został zachowany i po zmianie orientacji muszę zaktualizować wszystkie znaczniki. Jak mogę to zrobić, ponieważ nie mam żadnej metody getMarkerById() i nie mogę jej utrzymać, aby móc ją później przywrócić? – 4ntoine

+1

po kilku dniach grania z nim mogę wyznać, że fragment zachowujący krzywdzi markery, ponieważ nie ma sposobu, aby je znaleźć/utrzymać. ** odtworzyć fragment/aktywność i dodać markery ponownie ** wydaje się być jedynym fragmentem zatrzymującym – 4ntoine

+0

@ntoine jest również zły pomysł, ponieważ prowadzi do wycieku aktywności –

9

Można przechowywać obiekty MarkerOptions, ponieważ są one Parcelable, a następnie odtwarzać z nich obiekty .

+0

To jest absolutnie poprawna odpowiedź, dziękuję bardzo! – avalancha

+0

dzięki za odpowiedź, którą myślałem o zapisaniu obiektu Marker lub obiektu MarkerOptions, dałeś mi odpowiedź. –

0

Obiekt znacznika (dla map Google google) obsługuje teraz przechowywanie dowolnego obiektu danych za pomocą znacznika przy użyciu Marker.setTag() i pobieranie obiektu danych za pomocą Marker.getTag().

Umożliwia to na przykład śledzenie liczby kliknięć określonego znacznika. Lub, przechowując dodatkowe dane, które następnie mogą być wyświetlane w niestandardowym InfoWindow.

Zobacz Marker Data.

Powiązane problemy