Mostrando elenchi ricorsivi all'interno di una visualizzazione scheda
-
28-10-2019 - |
Domanda
Domanda di algoritmo qui.
Sto creando un'app che mostra un documento legale, con schede per la navigazione (TOC, segnalibri, ecc.). All'interno della scheda TOC, devo mostrare un contenuto multilivello. Al 'Leaf "del TOC, devo mostrare un TextView
Quindi, avrei potuto:
Tab1: Elenco -> Elenco -> Elenco -> Elenco -> Elenco -> TextView
o
Tab1: Elenco -> Elenco -> Elenco -> TextView
o
Tab1: Elenco -> TextView
A seconda del capitolo, sezione, sottosezione, struttura della sottosubsezione del libro che sto mostrando.
Ora, non importa quanto sei profondo, il tabhost deve essere sempre presente, per fornire la navigazione principale. (Sì, ho chiesto e devo usare le schede, non un menu.)
La domanda:
Come si implementa l'elenco ricorsivo all'interno del framelayout di una scheda? O dovrei usare un elenco di schede come schede e non usare il tabhost?
Idee?
Grazie!
llappall
Soluzione
Bene. Numero uno che non puoi mettere ListViews
dentro ListViews
, ScrollViews
, GridViews
o qualsiasi cosa scorrevole per quella materia (cioè a ListView
L'articolo non può essere ListView
). Potrebbe compilare, potrebbe funzionare, ma i risultati non saranno ciò che ti aspetti o desideri. Questo perché a ListView
non può avere un'altezza che è impostata su WRAP_CONTENT
.
Puoi avere un elenco a due livelli (ExpandableListView
) ma se hai bisogno di più livelli di quello che dovrai implementare la funzionalità tu stesso estendendo ListView
o ExpandableListView
.
Puoi anche avere elenchi sezionati ed elenchi con più tipi di elementi, ma non è possibile utilizzare i componenti SDK predefiniti per ottenere un elenco a 5 livelli.
Numero due: sì, puoi avere un ListView
dentro a TabHost
. Non sarai in grado di usare un ListActivity
, ma questo significa solo che dovrai chiamare il ListView
Metodi direttamente:
ListView myList = findViewById(R.id.myList);
myList.setAdapter(myListAdapter);
Invece di chiamare l'integrazione ListActivity
metodi.
Posiziona il tuo ListView
dentro il FrameLayout
Nel tuo file di layout. Se hai tre schede e il ListView
è il primo elemento all'interno del FrameLayout
, quindi verrà visualizzato come contenuto per la prima scheda. Se è il secondo elemento, sarà il contenuto per la seconda scheda e così via.
L'unico modo in cui è possibile implementare un elenco ricorsivo con componenti integrati sarebbe usare un singolo ListView
, quindi modificare il contenuto dell'adattatore del ListView
Quando un utente seleziona un elemento (essenzialmente un menu di drill-down utilizzando un singolo ListView). Dovresti anche prendere il pulsante di schiena con onBackPressed
Al fine di consentire all'utente di risalire l'elenco o fornire un pulsante di schiena da qualche parte.