Aktywne Wpisy
RobieZdrowaZupke +150
Macie jakąś czynność/zajęcie/hobby, które wam się kojarzą z giganormictwem? Dla mnie najbardziej normicką rzeczą jaką można sobie wyobrazić jest jaranie się uniwersami Marvela/DC. Zawsze jak ktoś mówi, że się tym jara, to wyobrażam sobie, że się wychowywał w takiej typowej rodzince klasy średniej podobnej do tej przedstawionej w serialu rodzinka.pl Pewnie gdy taka osoba była dzieckiem to rodzice normalnie ją brali do kina na filmy i miała normalny kontakt z rodzicami, mnie
dongio +9
Jakie znacie ciekawe słowa?
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ć.
Dałem tam wersję z pierwszym rozwiązaniem.
Konstrukcja if to mniej więcej takie coś:
if (jestToKlikniętaPozycja lub pierwsza iteracja) {
// inicjacja poszczególnych elementów
// wyświetlanie lub chowanie detailsLay - LineraLayout
// zwraca poprawiony view
} else {
// zwraca niezmieniony stan
}
Czyli ładuję ten sam layout ale zmieniam jego stan
LinkViewHolder holder = new LinkViewHolder();
if (v == null)
@maciejkiner: Rozwiązanie wydaje się logiczne. Ale czy przypadkiem opcja z holderem nie jest tym samym co trzymanie view w tablicy?
Zrobiłem tak :
metoda getView()
if (position == clickedPos) {
View vi = initRow(position); // tutaj zmieniam ifami wlasiciwie jeden element View.GONE / View.VISIBLE
views[position] = vi;
return vi;
} else {
return views[position];
}
I tutaj nie ma problemu z poprawnym trzymaniem view, ale za
Tu też jest dobry tutorial.
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:)