RecyclerView desplazado UP / DOWN oyente
¿Cómo sabemos si el usuario se desplazó hacia abajo o hacia arriba en RecyclerView
?
He intentado con RecyclerView#OnScrollListener
, que da la cantidad de desplazamiento vertical y el estado de desplazamiento. ¿Cómo conseguimos la última posición de desplazamiento cuando empezamos a arrastrar y desplazamos la posición cuando el estado de desplazamiento está inactivo.
- RecyclerView no se muestra
- ¿Necesito dependencia de Gradle para RecyclerView?
- ListSelector para RecyclerView en el dispositivo táctil libre (usando onKey Listener)
- Algo raro sucede mientras se desplaza RecyclerView demasiado rápido
- Actualización de elemento RecyclerView + llamada de red asincrónica
Gracias.
- ¿Cómo tener un ListView / RecyclerView dentro de un RecyclerView padre?
- Android reciclerview notifyItemInserted animación
- Set drawable para DividerItemDecoration
- Distancia entre RecyclerView demasiado lejos
- Confirmación y eliminación de deshacer en RecyclerView
- Diferencia entre android.support.v7.app.AlertController.RecycleListView y android.support.v7.widget.RecyclerView
- NotifyDataSetChanged no actualiza RecyclerView
- Soporte RecyclerView no muestra nada hasta que se toca
Prueba de esta manera:
private static int firstVisibleInListview; firstVisibleInListview = yourLayoutManager.findFirstVisibleItemPosition();
En tu oyente de desplazamiento:
public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); int currentFirstVisible = yourLayoutManager.findFirstVisibleItemPosition(); if(currentFirstVisible > firstVisibleInListview) Log.i("RecyclerView scrolled: ", "scroll up!"); else Log.i("RecyclerView scrolled: ", "scroll down!"); firstVisibleInListview = currentFirstVisible; }
La respuesta aceptada funciona bien, pero @MaciejPigulski dio una solución más clara y ordenada en el comentario a continuación. Sólo lo pongo como una respuesta aquí. Aquí está mi código de trabajo.
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); if (dy > 0) { // Scrolling up } else { // Scrolling down } } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState == AbsListView.OnScrollListener.SCROLL_STATE_FLING) { // Do something } else if (newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) { // Do something } else { // Do something } } });
Quería ocultar un diseño si la vista de reciclaje se desplaza hacia abajo y luego hacerla visible si la vista de reciclaje se desplaza hacia arriba. Hice un poco de pensamiento y surgió con esta lógica. La variable y es un int estático global. No olvide declarar y como static int y;
Espero que esto ayude a alguien 🙂
mRecyclerView.addOnScrollListener(new EndlessRecyclerOnScrollListener(lLayout) { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { // super.onScrolled(recyclerView, dx, dy); y=dy; } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if(mRecyclerView.SCROLL_STATE_DRAGGING==newState){ //fragProductLl.setVisibility(View.GONE); } if(mRecyclerView.SCROLL_STATE_IDLE==newState){ // fragProductLl.setVisibility(View.VISIBLE); if(y<=0){ fragProductLl.setVisibility(View.VISIBLE); } else{ y=0; fragProductLl.setVisibility(View.GONE); } } } });
- Android: Error: falla en la conversión al formato Dalvik
- Android – Cómo permitir el desplazamiento horizontal y vertical