Kontrolka ListView nie zapamiętuje zaznaczeń po przewinięciu - dlaczego?
12:45Tue, 15 April 2014
ListView w Androidzie (w przeciwieństwie np. do Delphi czy C#) służy jedynie do prezentacji danych, nie przechowuje ich. Dlatego jesteśmy zmuszeni wprowadzić naszą zmienną tablicową, w której będziemy przechowywać dane. Przy każdym odświeżeniu widoku ListView (jeśli np. użytkownik, przewijając listę dojdzie do elementu X) wywołana zostanie metoda
getView(int position, View convertView, ViewGroup parent)
za pomocą której musimy utworzyć widok, pobierając jego layout z zasobów - np. w ten sposób:
mInflater.inflate(R.layout.two_line_list_with_checkbox, null);
i następnie uzupełnić kontrolki zawarte w nowou tworzonym widoku, odczytując dane ze swojej tablicy, np. w ten sposób:
CheckBox checkBox1 = (CheckBox) convertView.findViewById(R.id.checkbox_in_list);
checkBox1.setText(mojaTablica[position].tytul);
checkBox1.setChecked(mojaTablica[position].zaznaczenie);
Przy czym tak uzupełniona pozycja listy trwa tylko do momentu wyjechania poza ekran (wtedy zostaje zniszczona), dlatego może się okazać (jeśli użytkownik będzie się bawił przewijaniem), że nasza pozycja listy będzie tworzona i niszczona kilka razy na sekundę (chciałem, żebyście to dobrze zrozumieli).
Jeśli nie wiecie czym jest metoda getView(), jak ją nadpisać i dlaczego w takich wypadkach warto stosować klasę ArrayAdapter, polecam ponadprzeciętny artykuł o listach ListView w serwisie vogella.com
Po jego przeczytaniu listy nie powinny mieć już przed Wami tajemnic.Podobne faq:
- [Android Studio] Komunikat przy próbie debugowania "Waiting For Debugger", który nie znika - co robić?
- Dlaczego nie można używać dekoratora ObjectInputStream na ByteArrayInputStream dla danych RAW otrzymanych np. w pakiecie UDP zawierającym dwie liczby i łańcuch tekstowy?
- Delphi - Tworzenie aplikacji dla systemu Android
- Podczas kompilacji dowolnego projektu w Android Studio wywala błąd "Gradle sync failed: Cause: com/sun/org/apache/xerces/internal/impl/XMLEntityManager" - co jest nie tak?
Skomentuj
Aby zamieścić komentarz, proszę włączyć JavaScript - niestety roboty spamujące dają mi niezmiernie popalić.
Komentarze czytelników
Nie ma jeszcze żadnych komentarzy.