Cómo detectar Android ListView Scrolling se detuvo?
Estoy intentando hacer algo después de que el desplazamiento OnScrollListener#onScrollStateChanged(SCROLL_STATE_IDLE)
, intenté usar OnScrollListener#onScrollStateChanged(SCROLL_STATE_IDLE)
para detectar cuando el desplazamiento se detuvo ( TOUCH_SCROLL or FLING
) (en 1.5 funciona como espero). Pero cuando se ejecuta en 2.0, onScrollStateChanged no puede recibir el evento después de liberar el dedo. ¿Hay alguna devolución de llamada o de todos modos para detectar ese evento?
- ListView - ImageLoader mueve Lista / Elementos en Scroll up
- ¿Efecto de desplazamiento personalizado para scrollview?
- Android WebView: deshabilitar el degradado del borde amarillo de desplazamiento
- Cómo detectar si un listview está desplazándose hacia arriba o hacia abajo en android?
- Android smoothScrollBy se comporta mal
- Desplazamiento de imagen enriquecido y zoom en android
- El desplazamiento de texto no funciona
- Problemas de desplazamiento de GridView dentro de Viewpager dentro de NestedScrollView
- ¿Cómo detener el desplazamiento en un Widget de Galería?
- Android scroll down
- Sincronización de dos ListViews lado a lado de Android
- Android, appcompat v21, implementar técnicas de desplazamiento
- Desplazamiento de un childscene en AndEngine
Intenta usar el setOnScrollListener e implementa el onScrollStateChanged con scrollState == 0 … haz lo que necesites hacer …
setOnScrollListener(new OnScrollListener() { public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub } public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { Log.i("a", "scrolling stopped..."); } } });
El truco es realizar un seguimiento de cuando el usuario está lanzando y cuando no lo son. Parece que esto es sobre la única distinción que puedes hacer porque, como dijiste, las transiciones de desplazamiento con un dedo a ralentí no se registran. Esto es lo que estoy hablando:
public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState != OnScrollListener.SCROLL_STATE_FLING) { flinging = false; int count = view.getChildCount(); for (int i = 0; i < count; i++) { View convertView = view.getChildAt(i); Recipe recipe = (Recipe) convertView.getTag(); ImageView image = (ImageView) convertView.findViewById(R.id.icon); if (recipe != null && recipe.getImageURL() != null) { ImageLoader.loadImage(this, image, recipe.getImageURL()); } } } else { flinging = true; } }
Y luego en el adaptador listView:
public View getView(int position, View convertView, ViewGroup parent) { // Bunch of code.... if (!flinging) { ImageLoader.loadImage(BrowseRecipes.this, image, recipe.getImageURL()); } }
Por lo tanto, en lugar de reaccionar al cambio en el oyente, basta con cargar las imágenes (o lo que sea necesario hacer que es intensivo) en el primer lugar, siempre y cuando no hay flinging pasa.
Todo esto se ha sacado de mi proyecto aquí: https://github.com/pkulak/mealfire_android
- Fragmento de la animación de transición perdida tras el cambio de configuración
- Cómo implementar uncaughtException android