Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android: AbsListView.OnScrollListener SCROLL_STATE_IDLE no se llama después de SCROLL_STATE_TOUCH_SCROLL (versión 2.1)

Tengo un problema con la versión 2.1 de Android. Parece un error.

Adjunto un OnScrollListener a mi listView.

Estoy usando el método onScrollStateChanged(AbsListView view, int scrollState) para monitorear el estado del rollo de mi listview.

El scrollstate podría asumir el valor 3 (tomado de la documentación):

  1. SCROLL_STATE_FLING : El usuario se había desplazado previamente usando el tacto y había realizado un lanzamiento. La animación ahora está cayendo a una parada
  2. SCROLL_STATE_IDLE : La vista no se desplaza. Nota navegar por la lista usando el trackball cuenta como estar en estado inactivo ya que estas transiciones no están animadas.
  3. SCROLL_STATE_TOUCH_SCROLL : El usuario está desplazándose usando el tacto, y su dedo está todavía en la pantalla

Supongo que el SCROLL_STATE_IDLE siempre se pasará después de uno de los otros dos estados. Siempre es cierto excepto para Android versión 2.1. SCROLL_STATE_IDLE no se pasa después de SCROLL_STATE_TOUCH_SCROLL El problema también ocurre si detiene el fling con un toque en lugar de dejar que el scroll se detenga por sí mismo. Este comportamiento extraño deja mi listView en un estado inconsciente.

Someonelse tiene el mismo problema? Sugerencia para un trabajo "no tan sucio" alrededor?

  • ¿Cómo manejar el evento click en Listview en android?
  • Buggy ListView me hace triste
  • ¿Cómo puede escuchar los eventos de clic en un ListView que se producen fuera de los elementos de la lista?
  • ListView vs LinearLayout
  • Android añadiendo pie de página a ListView addFooterView ()?
  • Android: ¿Cómo evitar la cabecera de desplazamiento en listview, android?
  • Desplazamiento con varios ListViews para Android
  • Android OnItemClickListener no funciona
  • 4 Solutions collect form web for “Android: AbsListView.OnScrollListener SCROLL_STATE_IDLE no se llama después de SCROLL_STATE_TOUCH_SCROLL (versión 2.1)”

    Creo que hay un error que se ha registrado para este caso.

    http://code.google.com/p/android/issues/detail?id=5086

    Tengo un problema similar en 2.2.

    Si la lista es lo suficientemente grande, y me desplazo hacia arriba, tengo CROLL_STATE_TOUCH_SCROLL primero mientras mi dedo está en la pantalla. Cuando mi dedo salir de la pantalla que tengo el SCROLL_STATE_FLING. Cuando mi vista ha parado el movimiento conseguí el SCROLL_STATE_IDLE.

    Pero, si durante el desplazamiento, llega a la vista superior o inferior, sólo los valores de desplazamiento / fling y nunca el inactivo.

    Revisé el proyecto de Shelves de Romain Guy y su implementación sufren el mismo problema en 2.2.x Me pregunto si se había dado cuenta aún.

    Todavía no lo he probado con 2.3.x

    He encontrado algo de una solución para esto (al menos para el nivel de API 9+, donde todavía estoy viendo el error). Estoy utilizando un GridView, pero creo que esto también debería funcionar para ListView.

    Estoy usando una subclase de GridView donde estoy detectando el overscroll (arriba o abajo):

      public class CustomGridView { private boolean mIsOverScrolled = false; @Override protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) { mIsOverScrolled = true; super.onOverScrolled(scrollX, scrollY, clampedX, clampedY); } public boolean isOverScrolled() { return mOsOverScrolled; } public void clearOverScroll() { mIsOverScrolled = false; } } 

    Entonces, en mi OnScrollListener de CustomGridView, tengo:

      @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (gridView.isOverScrolled()) { gridView.clearOverScroll(); } // ... } 

    Ahora cuando estoy comprobando para OnScrollListener.SCROLL_STATE_IDLE , también compruebo si !gridView.isOverScrolled() . No estoy seguro de si eso soluciona sus casos de uso específicos, pero espero que pueda utilizar la información adicional para determinar su estado actual a pesar del error.

    He tenido este mismo problema y publicado una solución en la lista de errores mencionados por DeRagan: Link

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.