Ho un ListFragment
supportato da un ArrayAdapter
che viene popolato da un Loader
. Quando l'utente fa clic su uno degli elementi, voglio passare un riferimento all'elemento selezionato, così come il resto degli elementi dell'elenco a un altro frammento. La mia domanda è come devo ottenere tutti gli articoli dall'adattatore? Qui ci sono le possibilità che vedo:Come ottenere tutti gli elementi da un ArrayAdapter
1. Mantenere un riferimento al supporto List
Creare l'adattatore in questo modo:
List<DomainObject> items = new ArrayList<DomainObject>();
listAdapter = new ArrayAdapter<DomainObject>(getActivity(), R.layout.mine, items);
e poi semplicemente passare items
o una copia di esso alla prossima attività.
Il lato negativo di questo è che sto facendo affidamento sul fatto non documentato che la stessa lista che passo al costruttore contiene gli articoli in seguito.
2. Scorrere l'adattatore
Quando un elemento viene cliccato, scorrere l'adattatore e costruire la lista. Sembra una quantità inutile di lavoro. Gli articoli sono contenuti in un List
nell'adattatore e sto copiando manualmente ogni elemento in un nuovo elenco.
3. Mantenere una lista separata di elementi quando vengono aggiunti alla adattatore
Prima di aggiungere una voce alla scheda, aggiungere a un elenco separato che io sostengo nel frammento. Ciò è anche dispendioso in quanto l'elenco degli elementi viene copiato nello ArrayAdapter
e nel frammento.
Mentre quell'articolo è per lo più buono, ignorerei la sua intera sezione sulla sicurezza del thread. Ha completamente torto sul motivo per cui vi sono supposti blocchi (a causa del filtraggio che si verifica su un thread in background) e che l''ArrayAdapter' si bloccherà già se' notifyDataSetChanged() 'viene invocato su qualsiasi argomento tranne il thread dell'interfaccia utente. –
@ scompt.com Penso che il link che hai postato sia sbagliato per spiegare ArrayAdapter. Sembra spiegare solo ArrayAdapter. Sono un po 'confuso ... –
theMfromA
Dalla pagina che hai collegato ... "Può solo visualizzare testo." => Sbagliato. "Ti costringe a fornire un elenco di oggetti CharSequence ..." => Sbagliato "Richiede che tu fornisca una risorsa di layout che contenga solo un TextView" => Sbagliato. Tutte le ipotesi sono errate ... Non intendo che ArrayAdapter sia migliore di BaseAdapter, ma le basi sono sbagliate. – Loenix