Ho difficoltà a capire come gestire correttamente Fragment
s in un modello di progettazione elenco-dettaglio tipico.Come gestire lo stato dell'interfaccia utente e lo stack posteriore in un layout a singolo/doppio riquadro
mio layout sta funzionando benissimo ed è strutturato come questo per il paesaggio (doppio pannello):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout ... >
<FrameLayout android:id="@+id/list" ... />
<FrameLayout android:id="@+id/container" ... />
</LinearLayout>
E così per la vista ritratto (riquadro singolo):
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:id="@+id/container" ... />
I avere anche refs.xml
in res/values-w600dp/
per assicurarsi che il layout appropriato venga caricato in base alla larghezza dello schermo del dispositivo.
Quando si seleziona una voce di elenco, la vista orizzontale dovrebbe mostrare l'elenco e i dettagli fianco a fianco, mentre la vista verticale dovrebbe mostrare solo i dettagli a schermo intero. Quando non è stato selezionato nulla, la vista orizzontale dovrebbe mostrare la sinistra a sinistra e lo spazio vuoto a destra, mentre la vista verticale dovrebbe mostrare solo l'elenco a schermo intero.
Tuttavia, ecco dove sto avendo problemi:
si usa un "principale"
Activity
per il layout dettagli optional lista +, e un altro "dettagli"Activity
per la ritratto, layout solo per i dettagli? Questo sembra essere quello che fa l'esempio . Ho ottenuto questo approccio per funzionare in generale, ma come faccio a mantenere lo stato del mio frammento di dettagli quando l'orientamento cambia?Si consideri il caso opposto mostrato sopra - in rotazione da verticale a orizzontale, mentre i dettagli sono visibili significa che i dettagli
Activity
avrebbe bisogno di esserefinish()
ed in modo che il principaleActivity
potrebbe visualizzare il layout a due pannelli, ma questo distrugge anche i dettagli frammento e il suosavedInstanceState
. Se l'utente ha immesso le informazioni nei campiEditText
nel frammento di dettagli, quindi ruota il dispositivo, come posso conservare l'intero stato dell'interfaccia utente del frammento di dettagli quando lo aggiungo al file principale (due riquadri)Activity
?È possibile utilizzare solo uno
Activity
e gestire da solo ilFragment
s? Ciò mi consente di mantenere lo stato dell'interfaccia utente dei dettagli quando l'orientamento cambia (perché Android si occupa automaticamente di questo), ma diventa disordinato quando si tratta del back stack.Considerate il caso nell'immagine - ruotando da orizzontale a verticale quando i dettagli sono visibili dovrebbe mostrare i dettagli del singolo riquadro, ma come gestisco correttamente il back stack e l'icona di casa
ActionBar
per mostrare l'elenco single- Pane? Girare di nuovo in orizzontale dovrebbe anche annullare qualsiasi manipolazione dello stack precedente che ho fatto in precedenza, dato che entrambi i frammenti saranno visibili contemporaneamente.
Dopo un po 'di più ricerca, ho trovato due domande simili (Switch from dual pane to single pane on orientation change maintaining fragment stack e Retain Fragment state between Activities), ma la mia situazione è leggermente diversa perché io non sto cercando di retrofit questa funzionalità, ma piano migliore per esso in anticipo. Cosa mi manca? Sicuramente Android può gestire sia lo stack posteriore (come nel caso multiplo Activity
) e lo stato dell'interfaccia utente (come nel caso singolo Activity
) in una sola volta, giusto?