2011-09-28 11 views
5

Estoy usando smoothScrollBy() para desplazarse a una posición específica en un ListView. Me gustaría recibir una notificación cuando se realiza el desplazamiento del ListView para integrarlo con el evento actual onScrollStateChanged() que se activa cuando el usuario se desplaza con el dedo.Android smoothScrollTo not invocar onScrollStateChanged

Actualmente estoy usando un Timer que se ejecuta 100ms después de la duración del desplazamiento suave, pero que no está tan orientado a eventos como yo preferiría.

+1

puedo confirmar de mi propia depuración que el '' smoothScroll * funciones no se disparará los cambios de estado de desplazamiento, y por lo tanto hacer que el 'OnScrollListener.onScrollStateChanged()' devoluciones de llamada inútil. – ohhorob

Respuesta

2

Si ha implementado OnScrollListener para su vista de lista, puede ver cuándo cambia ScrollState. Utilice un booleano global (isScrolling) establecido en true cuando llame a smoothScrollBy() y luego configúrelo como falso una vez que OnScrollListener registre un ScrollState de 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

Desafortunadamente 'smoothScrollToPositionFromTop' entró en la API 11. – styler1972

+0

Es verdad, pero ¿no solo está buscando recibir una notificación cuando se realiza el desplazamiento? Debería poder usar smoothScrollBy e implementar el oyente junto con un ciclo while que sondee continuamente el estado isScrolling. – saulpower

+2

Desde mi experiencia, 'smoothScrollBy()' no invoca 'onScrollStateChanged()', y a partir de este momento estoy usando un 'Timer' para sondear una vez que se debe hacer el desplazamiento. – styler1972