2013-08-22 15 views
7

Attualmente sto sviluppando per Android 4.3.
Sfondo:
Sto usando pageViewer per scorrere tra tre diversi frammenti. Il mio secondo frammento (scheda 2) ha XML con SupportMapFragment e altri contenuti. come illustrato di seguito:
My problem http://imageupload.co.uk/files/vrhg1e06x977rkm1vhmd.jpg
Il mio tentativo:
Durante la ricerca sul web ho notato che per SupportMapFragment ho bisogno FragmentActivity che non si applica per FragmentPagerAdapter. Ho bisogno che l'utente abbia la possibilità di controllare la mappa e controllare il resto del contenuto nel frammento.
La mia domanda:
Come posso utilizzare SupportMapFragment con viewPager mentre ho più contenuti nel frammento?Mappe V2 con viewPager

più sul mio codice: nel getItem all'interno FragmentPagerAdapter Sto tornando Singleton Fragments (ogni frammento ha una classe), pertanto, non sono riuscito a trovare una soluzione su Internet dal momento che la mia classe non può estendere SupportMapFragment perché ha più dati.

risposta

21

Da Android 4.2 (anche nella libreria di supporto per pre-Jelly) è possibile utilizzare nested fragments.

Si può vedere come creare tale frammento è:

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

Sopra codice copiato da here.

Nota importante: il layout personalizzato di Fragments non può contenere il tag <fragment>.

+0

qual è il contenuto di map_container, quindi? –

+0

@AdrianOlar 'map_container' è solitamente come' FrameLayout' che ospiterà frammenti aggiunti tramite codice come nell'esempio precedente. –

+0

Grazie mille per la tua risposta, davvero utile. –

Problemi correlati