2012-03-16 7 views
6

Ho letto in giro che i frammenti di nidificazione dovrebbe essere evitato, ma non posso vedere come effettuare le seguenti operazioni (ad esempio here.):C'è qualche alternativa ai frammenti annidati?

Sto lavorando su un'applicazione scheda (android:minSdkVersion="12") con la seguente interfaccia utente :

enter image description here

la barra di ricerca è sempre qui e l'utente può navigare attraverso diverse opzioni di menu ('casa', 'gallery' ...). La mia idea era di usare una BaseActivity con un layout contenente la barra di ricerca e un FrameLayout in cui avrei caricato il Fragment corrispondente alla scelta di navigazione dell'utente.

Il mio problema è che nel frammento 'Home' ho diverse schede, che ho voluto implementare allo stesso modo, cioè con un layout contenente la barra delle schede e un FrameLayout in cui vorrei caricare il frammento corrispondente, e questo porta a nested Fragment ...

So che invece di BaseActivity potrei usare diverse attività e includere la barra di ricerca in ogni layout, ma lo farebbe apparire e scomparire ogni volta che l'utente cambierebbe attività ...

EDIT

Ho anche bisogno di un footer fisso, quindi non posso usare la barra delle azioni come proposto da CommonsWare nella sua risposta.

Chiunque può aiutare?

risposta

3

C'è frammenti nidificati !!!!!!! nella nuova versione della libreria di supporto (supporto libreria v4, versione 11)

0

Non è possibile eseguire tabulazioni nel layout BaseActivity? Quindi nel layout BaseActivity saranno presenti la barra di ricerca, la barra delle tabulazioni e la cornice dei frammenti. Se non si desidera la barra di navigazione in alcuni frammenti, è possibile impostare la visibilità su View.GONE sulla barra di navigazione.

2

Per questo è possibile utilizzare ViewPager e lo FragmentPagerAdapter. ViewPager consente agli utenti di scorrere tra le visualizzazioni o (nel tuo caso) Fragments. Per mostrare i controlli tablike, usa ViewPagerIndicator.

Utilizzando il layout che hai descritto, invece di caricare un Fragment nella FrameLayout, gonfiare con un layout simile a questo:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <com.viewpagerindicator.TabPageIndicator 
     android:id="@+id/viewpagerIndicator" 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" /> 
    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 

</LinearLayout> 

successiva, assegnare un FragmentPagerAdapter al vostro ViewPager, che sarà poi caricare i frammenti.

Anche dare un'occhiata a my answer here. Fornisce un esempio più dettagliato. Si noti tuttavia che si estende PagerAdapter, anziché lo FragmentPagerAdapter che si dovrebbe usare.

0

La mia idea era di usare una BaseActivity con un layout contenente la barra di ricerca e un FrameLayout in cui avrei caricato il Fragment corrispondente alla scelta di navigazione dell'utente.

Se si utilizzano attività separate, anziché tentare di forzare tutto in una singola attività, non si finirà con i frammenti nidificati.

+0

Ma con una serie di attività che non posso avere la casella di ricerca come intestazione fissa, giusto? Avrei bisogno di includerlo nel layout di ogni attività e verrà ricaricato ogni volta che cambierò attività (cioè dal punto di vista dell'interfaccia utente, scomparirebbe e riapparirebbe). Stessa cosa se creo diverse attività per le schede. – jul

+1

@jul: "Ma con diverse attività non posso avere la casella di ricerca come intestazione fissa, giusto?" - mettilo in cima a ciascuna delle attività. Meglio ancora, mettilo nella barra delle azioni. "Avrei bisogno di includerlo nel layout di ogni attività e verrà ricaricato ogni volta che cambierò attività (cioè dal punto di vista dell'interfaccia utente, scomparirebbe e riapparirebbe)" - sì. – CommonsWare

+0

Ok vado a controllare se posso personalizzare la barra delle azioni come voglio la mia barra di ricerca. Avrei bisogno anche di un footer fisso, quindi se posso avere due barre d'azione e possono essere personalizzate, la userò. Grazie. – jul

0

Buone notizie !!!!! La libreria di supporto per Android versione 11 supporta già il frammento annidato. Support Package, revision 11 (November 2012)

Modifiche per la libreria di supporto v4:
        interfaccia utente
                Aggiunto il supporto per le classi Frammento nidificate.

come implementare frammento nidificato, da android developer

È ora possibile incorporare frammenti all'interno frammenti. Ciò è utile per una varietà di situazioni in cui si desidera posizionare componenti UI dinamici e riutilizzabili in un componente dell'interfaccia utente che è esso stesso dinamico e riutilizzabile. Ad esempio, se si utilizza ViewPager per creare frammenti che si spostano a destra e a sinistra e consumano la maggior parte dello spazio sullo schermo, è ora possibile inserire frammenti in ciascuna pagina di frammento.

Ci sono alcuni chiave qui: getChildFragmentManager() e getParentFragment()

Problemi correlati