2011-09-28 11 views
5

Sto utilizzando smoothScrollBy() per scorrere fino a una posizione specifica in un ListView. Desidero ricevere una notifica quando lo ListView viene fatto scorrere per integrarlo con l'attuale evento onScrollStateChanged() che viene sparato quando l'utente scorre con un dito.Android smoothScrollTo non invoca onScrollStateChanged

Attualmente sto usando un Timer che esegue 100ms dopo la durata del scroll scorrevole, ma che non è guidato da eventi come preferirei.

+1

posso confermare dalla mia debug che il '' smoothScroll * funzioni non si innescherà i cambiamenti di stato di scorrimento, e quindi rendere il 'OnScrollListener.onScrollStateChanged()' callback inutile. – ohhorob

risposta

2

Se hai implementato OnScrollListener per la tua listview puoi guardare quando cambia ScrollState. Utilizzare un valore booleano globale (isScrolling) impostato su true quando si chiama smoothScrollBy() e quindi impostato su false dopo che OnScrollListener registra un ScrollState di 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

Sfortunatamente 'smoothScrollToPositionFromTop' è entrato in API 11. – styler1972

+0

Vero, ma non stai solo cercando di essere avvisato quando lo scorrimento è fatto? Dovresti essere in grado di usare smoothScrollBy e implementare l'ascoltatore in congiunzione con un ciclo while che esegue il polling continuo dello stato isScrolling. – saulpower

+2

Dalla mia esperienza, 'smoothScrollBy()' non invoca 'onScrollStateChanged()', e al momento sto usando un 'Timer' per eseguire il polling una volta che lo scroll dovrebbe essere fatto. – styler1972

Problemi correlati