2013-08-22 21 views
7

Aktualnie rozwijam system Android 4.3.
Tło:
Używam pageViewer do przewijania między trzema różnymi fragmentami. Mój drugi fragment (zakładka 2) ma XML z SupportMapFragment i inną zawartością. jak pokazano poniżej:
My problem http://imageupload.co.uk/files/vrhg1e06x977rkm1vhmd.jpg
moja próba:
Podczas poszukiwania w internecie zauważyłem, że na SupportMapFragment muszę FragmentActivity który nie ma zastosowania do FragmentPagerAdapter. Potrzebuję użytkownika, aby mógł kontrolować mapę, a także kontrolować resztę zawartości w fragmencie. Moje pytanie:
Jak mogę użyć SupportMapFragment z viewPager mając więcej zawartości w Fragmentie?Mapy V2 z viewPager

Więcej o kodzie: w GetItem wewnątrz FragmentPagerAdapter Wracam Singleton fragmentów (każdy fragment ma klasę), dlatego nie mogłem znaleźć żadnego rozwiązania przez Internet, ponieważ moja klasa nie może wykraczać SupportMapFragment ponieważ ma więcej danych.

Odpowiedz

21

Od wersji Android 4.2 (także w bibliotece wsparcia dla pre-Jelly) można użyć nested fragments.

Można zobaczyć, jak stworzyć taki fragment brzmi:

public class MyFragment extends Fragment { 

    private SupportMapFragment fragment; 
    private GoogleMap map; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.layout_with_map, container, false); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     FragmentManager fm = getChildFragmentManager(); 
     fragment = (SupportMapFragment) fm.findFragmentById(R.id.map_container); 
     if (fragment == null) { 
      fragment = SupportMapFragment.newInstance(); 
      fm.beginTransaction().replace(R.id.map_container, fragment).commit(); 
     } 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     if (map == null) { 
      map = fragment.getMap(); 
      map.addMarker(new MarkerOptions().position(new LatLng(0, 0))); 
     } 
    } 
} 

Powyższy kod skopiowany z here.

Nuta uwodzicielska: Twój niestandardowy układ Fragments nie może zawierać tagu <fragment>.

+0

jaka jest zawartość map_container? –

+0

@AdrianOlar 'map_container' jest zwykle jako' FrameLayout', który będzie hostować fragmenty dodane za pomocą kodu jak w powyższym przykładzie. –

+0

Wielkie dzięki za odpowiedź, naprawdę pomocne. –