2011-01-17 23 views
6

Chcę powtórzyć listę elementów w widoku listy. Poniższy kod nie wystarcza do powtórzenia wszystkich pozycji na liście z powodu dziwnego zachowania funkcji getChildCount(), która zwraca tylko widoczną liczbę elementów.Iterowanie listy Wyświetlanie elementów w systemie Android

for (int i = 0; i < list.getChildCount(); i++) { 
    item = (View)list.getChildAt(i); 
    product = (Product)item.getTag(); 
    // make some visual changes if product.id == someProductId 
} 

moich ekranów 7 wyniki i gdy istnieje więcej niż 7 pozycji na liście, to nie jest możliwe, aby uzyskać dostęp do 8 pozycji lub tak .. widoczne tylko przedmioty ..

powinienem używać ListIterator zamiast?

Dzięki.

+0

W jaki sposób wypełniasz dane, Jeśli używasz adaptera, należy zastosować metodę getCount() adaptera listy – Reno

Odpowiedz

1

trzeba dostosować getView() metodę Listy adaptera i umieścić swój czek wewnątrz to, by sprawdzić, czy bieżący element identyfikatora mecze:

Product product = items.get(position); 
if(product.id == someProductId) { 
    //make visual changes 
} else { 
    //reset visual changes to default to account for recycled views 
} 

Ponieważ zazwyczaj tylko widoczne elementy istnieją tylko w określonym czasie, getView jest wywoływana za każdym razem, gdy trzeba zobaczyć więcej. Zostały one utworzone w tym czasie, zwykle powodują przetworzenie widoków z obecnie niewidocznych elementów na liście (dlatego też chcesz zresetować zmiany, jeśli kryteria NIE pasują).

+0

Hi kcoppock. Dzięki za odpowiedź. Teraz działa zgodnie z oczekiwaniami, ale nie aktualizuje widocznej części interfejsu, dopóki nie przewinie. Czy jest jakieś zdarzenie, które mogę wyzwolić, aby odświeżyć interfejs użytkownika. – pocoa

+1

Tak, możesz wywołać 'listView.notifyDatasetChanged();'. To odświeży ListAdapter, jednak powinno być poprawne nawet przed przewinięciem; getView zostaje wywołany po zbudowaniu każdego widoku. Czy możesz umieścić swój kod ListAdapter w oryginalnym pytaniu? – kcoppock

+0

Dziękuję za pomoc. Tak mi przykro, że tak późno to zaakceptowałem. Myślałem, że już się zgodziłem. Twoje zdrowie. – pocoa

0

Liczba widoków w ListView (7) różni się od liczby elementów w adapterze (czyli więcej niż 7) .Spróbuj użyć BaseAdapter.

1

So @kcoppock rozwiązał twój pierwszy problem, wydaje się, że masz inny problem. Jak zaktualizować element widoku? Android aplikacja SMS pokazuje jeden sposób:

  1. stworzyć własny element widoku listy tak:

    public class MyListItem extends RelativeLayout { 
    ... 
    } 
    

    w pliku listy Widok układu pozycja:

    < MyListItem android:layout_width=.....> 
    ... 
    </ MyListItem > 
    
  2. iw swoim kod, gdy widoczny jest twój element widoku, zarejestruj MyListItem jako odbiornik o zmienionej zawartości (dane zależą od Ciebie). Chodzi o to, że po zmianie danych możesz bezpośrednio zaktualizować przedmiot.

Sprawdź kod źródłowy aplikacji SMS, aby dowiedzieć się więcej.