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.

  • Desaparecer divisor en ListView cuando ArrayAdapter.isEnabled devuelve false
  • ¿Retrofit hace llamadas de red en el hilo principal?
  • Android: varias versiones personalizadas de la misma aplicación
  • Error en la verificación de la firma de Android LVL
  • If (session.isOpen ()), inicio de sesión de facebook en android siempre devuelve false
  • Establezca la altura de imageview como matchparent programmatically
  • 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?

  • Gradle y estructura multiproyecto
  • ¿Cómo anular los elementos definidos en un proyecto de biblioteca de Android?
  • Adición dinámica de vistas a RelativeLayout dentro de ScrollView
  • En seguridad de facturación de aplicaciones
  • NETWORK_PROVIDER no proporciona ubicaciones actualizadas
  • Android: ¿Cómo liberar recursos cuando termina la aplicación?
  • 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.