2011-09-28 13 views
5

Używam smoothScrollBy() do przewijania do określonej pozycji w ListView. Chciałbym otrzymywać powiadomienie, gdy ListView zostanie przewinięte w celu zintegrowania z bieżącym zdarzeniem onScrollStateChanged(), które jest uruchamiane, gdy użytkownik przewinie palcem.Android smoothScrollBez wywoływania onScrollStateChanged

Obecnie używam Timer, który działa 100 ms po czasie gładkiego przewijania, ale nie jest to tak napędzane zdarzenie, jak wolałbym.

+1

Mogę potwierdzić z własnego debugowania że '*' smoothScroll funkcje nie będą powodować zmiany stanu przewijanie, a zatem spowodować, że 'OnScrollListener.onScrollStateChanged()' Callbacki bezużyteczne. – ohhorob

Odpowiedz

2

Jeśli zaimplementowałeś OnScrollListener dla twojego listview, możesz obserwować, kiedy zmieni się ScrollState. Użyj globalnego zestawu boolowskiego (isScrolling) do wartości true, gdy wywołasz smoothScrollBy(), a następnie ustaw na false, gdy OnScrollListener zarejestruje wartość ScrollState SCROLL_STATE_IDLE.

sidebar1.smoothScrollToPositionFromTop(currentPosition, 0, 500); 
isScrolling = true; 

sidebar1.setOnScrollListener(new OnScrollListener() { 

@Override 
public void onScrollStateChanged(AbsListView view, int scrollState) { 
    if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { 
     isScrolling = false; 
    } 

} 

@Override 
public void onScroll(AbsListView view, int firstVisibleItem, 
     int visibleItemCount, int totalItemCount) { 

} 
}); 
+0

Niestety "smoothScrollToPositionFromTop" pojawił się w interfejsie API 11. – styler1972

+0

To prawda, ale czy po prostu nie chcesz otrzymywać powiadomień o zakończeniu przewijania? Powinieneś być w stanie użyć smoothScrollBy i zaimplementować detektor w połączeniu z pętlą while, która ciągle odpytuje stan isScrolling. – saulpower

+2

Z mojego doświadczenia, 'smoothScrollBy()' nie wywołuje 'onScrollStateChanged()', i od tego czasu używam 'Timera' do odpytywania, gdy przewijanie powinno być zrobione. – styler1972

Powiązane problemy