Mam ListFragment
wspierany przez ArrayAdapter
, który jest wypełniany przez Loader
. Kiedy użytkownik kliknie na jeden z elementów, chcę przekazać odniesienie do wybranego elementu, a także pozostałe elementy listy do innego fragmentu. Moje pytanie brzmi: jak mam pobrać wszystkie elementy z adaptera? Oto możliwości, które widzę:Uzyskiwanie wszystkich elementów z ArrayAdapter
1. Należy odniesienie do podłoża List
Tworzenie adapter tak:
List<DomainObject> items = new ArrayList<DomainObject>();
listAdapter = new ArrayAdapter<DomainObject>(getActivity(), R.layout.mine, items);
a następnie po prostu przejść items
lub jego kopię do następnej czynności.
Wadą tego, co widzę, jest to, że polegam na nieudokumentowanym fakcie, że ta sama lista, którą przekazuję do konstruktora, zawiera te elementy później.
2. iterację adaptera
Gdy element zostanie kliknięty, iterację adapterem i stworzyć listę. Wydaje się to niepotrzebną ilością pracy. Elementy są zawarte w adapterze List
i ręcznie kopiuję każdy element na nową listę.
3. Trzymać osobną listę elementów podczas dodawania do adaptera
Przed dodaniem elementu do adaptera, należy dodać go do oddzielnej liście, że utrzymanie we fragmencie. Jest to również marnotrawstwem, ponieważ lista elementów jest kopiowana w pliku ArrayAdapter
i fragmentu.
Podczas gdy ten artykuł jest w większości dobry, zignorowałbym całą sekcję dotyczącą bezpieczeństwa wątków. Jest całkowicie nie w porządku, dlaczego zakłada się, że są zamki (z powodu filtrowania, które występują w wątku tła) i że 'ArrayAdapter' już zawiesza się, jeśli' notifyDataSetChanged() 'jest wywoływany na czymkolwiek poza wątkiem interfejsu użytkownika. –
@ scompt.com Myślę, że opublikowany przez Ciebie link jest nieprawidłowy, wyjaśniając ArrayAdapter. Wydaje się wyjaśniać tylko ArrayAdapter. Jestem trochę zdezorientowany ... –
theMfromA
Ze strony, którą połączyłeś ... "Może wyświetlać tylko tekst." => Nieprawidłowy. "Wymusza dostarczenie listy elementów CharSequence ..." => Wrong "Wymaga podania zasobu układu, który zawiera tylko TextView" => Wrong. Niemal wszystkie założenia są błędne ... Nie mam na myśli, że ArrayAdapter jest lepszy od BaseAdapter, ale podstawy są złe. – Loenix