android android-recyclerview infinite-scroll onscrolllistener android-nestedscrollview

android - RecyclerView ScrollListener dentro de NestedScrollView



android-recyclerview infinite-scroll (2)

Para lograr un desplazamiento sin fin para la vista de reciclador que está bajo NestedScrollView, puede usar "NestedScrollView.OnScrollChangeListener"

nestedScrollView.setOnScrollChangeListener((NestedScrollView.OnScrollChangeListener) (v, scrollX, scrollY, oldScrollX, oldScrollY) -> { if(v.getChildAt(v.getChildCount() - 1) != null) { if ((scrollY >= (v.getChildAt(v.getChildCount() - 1).getMeasuredHeight() - v.getMeasuredHeight())) && scrollY > oldScrollY) { //code to fetch more data for endless scrolling } } });

Aquí v.getChildCount() -1 debería proporcionarle la vista de reciclador para la cual está implementando un desplazamiento sin fin.

También scrollY > oldScrollY confirma que la página se está desplazando hacia abajo.

Referencia: NestedScrollView.OnScrollChangeListener

Tengo un EndlessRecyclerView al final de un NestedScrollView . EndlessRecyclerView significa: cuando el usuario se desplaza a la parte inferior del recyclerView, carga más datos. Esto ya está implementado y funciona en otro lugar, pero cuando coloco el recyclerView dentro de NestedScrollView los eventos OnScrollListener no se OnScrollListener .

Diseño XML:

<NestedScrollView> <Other views/> <EndlessRecyclerView/> </NestedScrollView >

Código:

recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); // This is never fired! Here is where I implement the logic of EndlessRecyclerView } });

¿Cómo obtengo el evento de desplazamiento para el caso anterior?

Sé que no es bueno tener dos vistas desplazables una dentro de la otra. Pero, ¿cómo tengo el caso anterior sin tener dos vistas desplazables?

Ya he seguido este enlace pero no funciona: evento de desplazamiento para recyclerview dentro de scrollview para Android


Tuve un problema similar, aunque era un poco diferente. En mi caso, tuve una vista de reciclaje dentro de un fragmento mientras que NestedScrollView estaba en el content_main xml (parte de la actividad).

Envolví mi reciclaje que estaba dentro del fragmento con SwipeRefreshLayout

Este es el código de mi fragmento:

<?xml version="1.0" encoding="utf-8"?> <androidx.swiperefreshlayout.widget.SwipeRefreshLayout android:id="@+id/swipe_dummy" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/top_series_recycle_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

Lo único que queda por hacer es deshabilitar SwipeRefreshLayout desde el código

mSwipeLayout.isEnabled = false

Si no lo haces, al deslizar hacia abajo se mostrará un icono de actualización interminable. Quería compartir esta solución en caso de que alguien necesite esta funcionalidad o tenga este problema también

Después de envolver el reciclaje con un SwipeRefreshLayout, verás addOnScrollListener de recycleview se llamará como siempre