
#java #android #adaptery
Mirki pomożecie? Mam problem z ListView.
Sprawa wygląda następująco:
- Po kliknięciu na element lisy, dany element zmienia stan (powiększa się itd).
- Adapter listy to własny adapter rozszerzający klasę Base Adapter.
Rozwiązałem to w tak:
- Po kliknięciu na element wywoływana jest metoda notifyDataSetChanged();
- Adapter na nowo przelatuje listę
- W metodzie getView() rozróżniam czy element został kliknięty i na podstawie tego decyduję czy pozostawić poprzedni stan czy zmienić parametry.
Sposób prosty i szybki, ale oczywiście jest problem. Bo gdy wywoływana jest metoda getView() i chce zwrócić poprzedni stan (poprzez return convertView) adapter czasami zwraca błędne View tzn inny element niż powinien być na danej pozycji. Dzieje się to tylko w momencie kiedy lista jest przesuwana.
Doszedłem do wniosku, że adapter niepoprawnie przechowuje elementy lisy. Zrobiłem więc tablicę View[] i w niej trzymam wszystkie elementy.
Rozwiązało to problem dublujących się elementów listy, ale teraz problemem jest co innego.
Metody onClick w danych elementach listy czasami nie działają. Nie widzę tu jakiejś prawidłowości. Po prostu wygląda to jak by było to losowe.
I w tym momencie opadają mi witki i robię typowe WTF. Obydwa rozwiązania nie działają prawidłowo i nie mam pomysłu jak to rozwiązać.
Mirkowe eksperty doradźcie bo walczę z tym od dłuższego czasu, a ani Google i StackOverflow pytane nie chcą konkretnie odpowiedzieć.
Mirki pomożecie? Mam problem z ListView.
Sprawa wygląda następująco:
- Po kliknięciu na element lisy, dany element zmienia stan (powiększa się itd).
- Adapter listy to własny adapter rozszerzający klasę Base Adapter.
Rozwiązałem to w tak:
- Po kliknięciu na element wywoływana jest metoda notifyDataSetChanged();
- Adapter na nowo przelatuje listę
- W metodzie getView() rozróżniam czy element został kliknięty i na podstawie tego decyduję czy pozostawić poprzedni stan czy zmienić parametry.
Sposób prosty i szybki, ale oczywiście jest problem. Bo gdy wywoływana jest metoda getView() i chce zwrócić poprzedni stan (poprzez return convertView) adapter czasami zwraca błędne View tzn inny element niż powinien być na danej pozycji. Dzieje się to tylko w momencie kiedy lista jest przesuwana.
Doszedłem do wniosku, że adapter niepoprawnie przechowuje elementy lisy. Zrobiłem więc tablicę View[] i w niej trzymam wszystkie elementy.
Rozwiązało to problem dublujących się elementów listy, ale teraz problemem jest co innego.
Metody onClick w danych elementach listy czasami nie działają. Nie widzę tu jakiejś prawidłowości. Po prostu wygląda to jak by było to losowe.
I w tym momencie opadają mi witki i robię typowe WTF. Obydwa rozwiązania nie działają prawidłowo i nie mam pomysłu jak to rozwiązać.
Mirkowe eksperty doradźcie bo walczę z tym od dłuższego czasu, a ani Google i StackOverflow pytane nie chcą konkretnie odpowiedzieć.
- Najlepsze
- Wszystkie komentarze






LinkViewHolder holder = new LinkViewHolder();
if (v ==
Tu też jest dobry tutorial.
Dałem tam wersję z pierwszym rozwiązaniem.
Konstrukcja if to mniej więcej takie
@maciejkiner: Rozwiązanie wydaje się logiczne. Ale czy przypadkiem opcja z holderem nie jest tym samym co trzymanie view w tablicy?
Lars Vogel zawsze na propsie i trzeba będzie przerobić jego tutka bo widzę spore braki mam.
Muszę także przyjrzeć się tym holderom. Jeśli mówisz, że są bardziej wydajne to na pewno będzie przydatne. Dzięki za pomoc:)