2012-11-01 12 views
17

Mam ListView, który zawiera więcej elementów, a następnie mogę wyświetlać w tym samym czasie.Teraz chcę uzyskać indeks wszystkich elementów, które są w pełni widoczne (-> wyłączając te, które są tylko częściowo widoczny). W tym momencie używam getFirstVisiblePosition() & getLastVisiblePosition() do do iterowania ich, ale ta metoda nie jest dokładna, jak chcę.Uzyskaj wszystkie widoczne obiekty na lListView

Czy istnieje lepsze rozwiązanie?

Odpowiedz

30

ListView utrzymuje wiersze uporządkowane na liście z góry, do której można uzyskać dostęp za pomocą getChildAt(). Więc to, czego chcesz, jest całkiem proste. Chodźmy pierwszy i ostatni Widoki, a następnie sprawdzić, czy są one całkowicie widoczne lub nie:

// getTop() and getBottom() are relative to the ListView, 
// so if getTop() is negative, it is not fully visible 
int first = 0; 
if(listView.getChildAt(first).getTop() < 0) 
    first++; 

int last = listView.getChildCount() - 1; 
if(listView.getChildAt(last).getBottom() > listView.getHeight()) 
    last--; 

// Now loop through your rows 
for(; first <= last; first++) { 
    // Do something 
    View row = listView.getChildAt(first); 
} 

Dodawanie

Teraz chcę dostać indeks wyłączyć wszystkie elementy, które są w pełni widoczne

Nie jestem pewien, co oznacza to zdanie. Jeżeli powyższy kod nie jest indeksem chciałeś można użyć:

int first = listView.getFirstVisiblePosition(); 
if(listView.getChildAt(0).getTop() < 0) 
    first++; 

Aby mieć indeks, który jest w stosunku do adaptera (tj. adapter.getItem(first))

+0

Nieważne co powiedziałem :) – Luksprog

+0

@Luksprog Bez obaw. – Sam

+1

listView.getChildAt (index) .getTop() podstępna praca dla mnie..dzięki – CoDe

1

Sposób zrobiłbym to bym Rozszerz dowolny widok, który przechodzisz w getView adaptera ListView i nadpisaj metody onAttachedToWindow i onDetachedToWindow, aby śledzić indeksy, które są widoczne.

1

Wypróbuj onScrollListner i możesz używać funkcji getFirstVisiblePosition i getLastVisiblePosition.

Ten link this zawiera podobny typ problemu. Przypuszczam, że masz tam odpowiedź.

+0

Dzięki za link, ale ten problem jest dokładnie tym, co miałem, nie daje mi indeksu ListEntry, co jest w pełni widoczne, zwraca wszystkie przedmioty na ekranie... – Kooki

-1

Powyższy kod jest nieco poprawny. Jeśli potrzebujesz znaleźć całkowicie widoczną lokalizację widoku użyj kodu poniżej:

Powiązane problemy