Oto scenariusz: Mam prosty ListView wyświetlający kanał twitter. Mam CursorAdapter, który pobiera tweety z sqlite. Kiedy wywołuję funkcję requery() na moim kursorze, oczekuję, że zostaną pobrane nowe tweety, które zostały dodane do bazy danych. Wszystko działa dobrze, a nowe elementy są nawet widoczne w ListView po tym wydarzeniu.Android ListView z CursorAdapter ma nieprawidłową pozycję przewijania po wywołaniu Requery po dodaniu nowych pozycji
Problem polega na tym, że pozycja przewijania jest zapisywana na podstawie przesunięcia pozycji przedmiotu. Powiedzmy więc, że pierwszą widoczną pozycją w moim ListView jest 4. Kiedy requery i 2 nowe pozycje zostaną dodane do góry listy, ListView utrzymuje pierwszą widoczną pozycję przewijania przedmiotu jako 4, jednak ponieważ na liście są dwie nowe pozycje Teraz widzę inny przedmiot na pozycji 4 niż przed odświeżeniem. Ten obraz ilustruje przed i po:
zauważyć jak Przedtem Tweet D to pierwszy widoczny element i potem Tweet B staje teraz pierwszy widoczny element.
Moje pytanie brzmi: w jaki sposób zachować tę samą pozycję przewijania w oparciu o kursor positon podczas wywoływania zamówienia, tak aby w tym przykładzie Tweet był pierwszy widoczny element po zgłoszeniu?
Główny problem polega na tym, że wszystkie moje przedmioty nie są na tej samej wysokości, więc przewijanie tak nie może uzyskać pozycję „dokładnie” to było na wcześniej, na przykład, jeśli element jest pół widoczny ... – Redth
Spróbowałeś? Ponieważ nawet moja lista zawiera rzędy o zmiennej wysokości. Ale działa idealnie. 'int top = v == null? 0: v.getTop(); 'Ta część faktycznie obsługuje przypadek, gdy element jest w połowie widoczny. – Enigma