artykuły

Kontrolka ListView nie zapamiętuje zaznaczeń po przewinięciu - dlaczego?

12:45
wto, 15 kwiecień 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:

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.
    Dexter