2013-08-22 9 views
7

Ich entwickle derzeit für Android 4.3.
Hintergrund:
Ich benutze pageViewer, um zwischen drei verschiedenen Fragmenten zu scrollen. Mein zweites Fragment (Tab 2) hat XML mit SupportMapFragment und anderem Inhalt. wie unten dargestellt:
My problem http://imageupload.co.uk/files/vrhg1e06x977rkm1vhmd.jpg
Mein Versuch:
Während der Suche im Web ich, dass ich brauche FragmentActivity für SupportMapFragment bemerkt, die für FragmentPagerAdapter nicht gilt. Ich brauche den Benutzer, um die Kontrolle über die Karte zu haben und den Rest des Inhalts im Fragment zu kontrollieren.
Meine Frage:
Wie kann ich das SupportMapFragment mit dem ViewPager verwenden, während ich mehr Inhalt im Fragment habe?Maps V2 mit viewPager

Mehr über meinen Code: im getItem innerhalb FragmentPagerAdapter ich Singleton Fragmente bin Rückkehr (jedes Fragment hat eine Klasse) deshalb konnte ich keine Lösung über das Internet finden, da meine Klasse SupportMapFragment nicht verlängern kann, weil es hat mehr Daten.

Antwort

21

Seit Android 4.2 (auch in der Support-Bibliothek für Pre-Jelly) können Sie nested fragments verwenden.

können Sie sehen, wie solches Fragment erstellen ist:

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))); 
     } 
    } 
} 

Above Code aus here kopiert.

Wichtiger Hinweis: Ihr benutzerdefiniertes Layout Fragments kann <fragment> nicht enthalten.

+0

was ist dann der Inhalt von map_container? –

+0

@AdrianOlar 'map_container' ist normalerweise'FrameLayout', das Fragmente wie im obigen Beispiel per Code hinzufügen wird. –

+0

Vielen Dank für Ihre Antwort, sehr hilfreich. –