Wpis z mikrobloga

#androiddev #naukaprogramowania

Dwie sprawy co do adaptera i listview. Po pierwsze jesli mam w elemencie listy np checkbox i jak go zaznacze to chce zeby dany item sie pokorował i spadł na sam dol listy, probowalem roznych kombinacji w Adapterze ale srednio to działa bo nie zapamietuje, czy dobrym pomysłem było by zrobic arrayliste typu np. ListItems(text, color, chcecked)?

A druga sprawa to taki problem że jak lista jest dłuzsza (tzn uzywa scrola) to jak zaznacze jeden element i przewine w dol to mi zaznacza jakieś losowe, nie wiem od czego to zależy.

Dzieki za pomoc jak coś :)
Pobierz MrFisherman - #androiddev #naukaprogramowania

Dwie sprawy co do adaptera i listview....
źródło: comment_bNs1vXIJ8UDrBb6vCdhs1exFzwpsYhsD.jpg
  • 11
@MrFisherman:
1. Jeżeli używasz ListView to lepiej zamień go od razu na RecyclerView - w zasadzie to samo ale RecyclerView jest lepszy, ma dużo przydanych rzeczy i narzuca parę dobrych praktyk.
2. Co do losowego zaznaczania się checków w komórkach - pamiętaj, że Android stara się odzyskiwać widoki zamiast tworzyć nowe (wtedy te omyłkowo zaznaczone checki są naprawdę odzyskanymi, wcześniej zaznaczonymi checkami) w związku z czym musisz nie tylko ustawiać tekst
@calc_exe: co do 3. To tak, uzywam CustomAdaptera który przyjmuje jako argument ArrayListe stringow i je wyswietla, problem natomiast jest taki że udaje mi sie dać na ostatni element bo wywalam z array listy potem znowu dodaje i daje to o czym mówileś czyli notifyDataChanged, tyle że koloruje sie tylko ostatni a ja potrzebuje zrobic cos takiego zeby ogolnie te zaznaczone sie kolorowaly i spadały w dół (w sensie to jest
@MrFisherman: Po pierwsze przejdź na RecyclerView i odpowiadający mu ViewHolder, tak będzie najlepiej.
Po drugie - nie za bardzo wiem jak to teraz masz zorganizowane bo bez kodu za dużo nie powiem. Natomiast o ile dobrze rozumiem flow powinien być taki:
- w metodzie która musi przygotować konkretną komórkę wyciągasz odpowiedni element z ArrayList (powiedzmy obiekt Product składający się z pól name oraz checked),
- w zależności od wartości checked albo
@MrFisherman: Po zachowaniu listy wnioskuje, że albo używasz RecyclerView, albo ListView z ViewHolder pattern (RecyclerView wymusza używanie ViewHolderów). Skoro tak, to traktuj "onBindViewHolder" jako metodę gdzie musisz ustawić tło i zaznaczenie elementu. Ważne jest to, żebyś nie ustawiał tła jedynie wtedy gdy element jest zaznaczony, ale także gdy nie jest (np. na białe czy przezroczyste). Wtedy masz pewność, że zachowanie listy będzie takie jak się spodziewasz