2013-02-11 11 views
5

Chcę móc przełączać się między fragmentem listy a fragmentem mapy przez użytkownika naciskającego przycisk paska akcji. Obecnie mogę przełączać się między nimi dobrze, ale używam wskaźnika pustego, gdy próbuję uzyskać rzeczywisty obiekt GoogleMap z fragmentu. Kiedy próbuję przenieść kamerę, nie porusza się z powodu zerowania obiektu GoogleMap i pomijania tego kodu. Nie jestem pewien, czy to musi być spowodowane faktem, że nigdy nie stworzyłem fragmentu z xml, a raczej używam tylko kodu? Mój kod jest następujący:Zamień między fragmentami mapy i fragmentu mapy w Androidzie

public class MapFragment extends SherlockMapFragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View root = super.onCreateView(inflater, container, savedInstanceState); 
     return root; 
    } 

} 

    @Override 
    public void swapFragments() { 
     FragmentManager fm = getSupportFragmentManager(); 
     FragmentTransaction transaction = fm.beginTransaction(); 
     if (listFragment.isVisible()) { 
      sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); 
      transaction.replace(R.id.root, mapFragment); 
     } else { 
      sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); 
      transaction.replace(R.id.root, listFragment); 
     } 
     transaction.commit(); 
    } 

    @Override 
    public void setupMapFragment() { 
     mapFragment = new MapFragment(); 
     mMap = mapFragment.getMap(); 
     if (mMap != null) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
        new LatLng(BuzzbabaApplication.latitude, 
          BuzzbabaApplication.longitude), 14)); 
     } 
    } 

Odpowiedz

3

Wpadłem też na ten problem. Problem został spowodowany, jak już wspomniałeś, ponieważ ładujesz MapView dynamicznie. Oznacza to, że MapView zakończył ładowanie przed załadowaniem obiektu GoogleMap.

GoogleMap można uzyskać tylko za pomocą GetMap() podczas działania systemu mapy jest załadowany, a podstawowa w widoku fragment istnieje

(http://developer.android.com/reference/com/google/android/gms/maps/SupportMapFragment.html)

Proponowane rozwiązanie było stworzenie fragment mapy w XML. Oznacza to, że po zakończeniu ładowania widoku obiekt GoogleMap został załadowany i można się do niego odwoływać.

+0

Hmm ... więc obecnie mój główny układ ma tylko FrameLayout, którego używam do wstawiania różnych fragmentów list, chciałem uniknąć wstawiania fragmentu mapy, ponieważ będę go od razu ukrywać, dopóki nie klikną coś, ale czy to jedyna opcja? – egfconnor

+1

Nieważne, dodałem wywołanie zwrotne do MapFragment w onActivityCreated, które sygnalizuje, że GoogleMap nie jest pusta i jest gotowa. Wydaje się, że to bezpieczne miejsce. – egfconnor

+0

Tak, dodając wywołanie zwrotne jest dobrym sposobem na obejście tego również. Ładne rozwiązanie. –

Powiązane problemy