Detectar cuando RecyclerView alcanza la posición más baja durante el desplazamiento
Tengo este código para un RecyclerView.
recyclerView = (RecyclerView)rootview.findViewById(R.id.fabric_recyclerView); recyclerView.setLayoutManager(layoutManager); recyclerView.addItemDecoration(new RV_Item_Spacing(5)); FabricAdapter fabricAdapter=new FabricAdapter(ViewAdsCollection.getFabricAdsDetailsAsArray()); recyclerView.setAdapter(fabricAdapter);
Necesito saber cuando el RecyclerView alcanza la posición más baja durante el desplazamiento. Es posible ? Si es así, ¿cómo?
- ¿Por qué mi scrollHorizontally no funciona?
- Android ListView - detiene el desplazamiento en la posición de fila 'completa'
- El evento de desplazamiento del navegador no se dispara con suficiente frecuencia en dispositivos iOS y Android
- El desplazamiento suave no funciona en ViewPager (biblioteca de soporte)
- Desplazamiento del índice de Android
- RecyclerView Adapter está repitiendo valores en lugares erróneos
- ¿Cómo usar scrollVerticallyBy () con Android RecyclerView y LayoutManager?
- ¿Cómo hacer que el desplazamiento de Listview sea más lento?
- Detener el desplazamiento en una vista de lista
- Android ListView automáticamente Carga más datos cuando se desplaza a la parte superior
- Android WebView: deshabilitar el degradado del borde amarillo de desplazamiento
- SetCurrentItem en ViewPager no se desplaza inmediatamente en la posición correcta
- Iniciar una animación onstart CustomViewPager
Simplemente implemente un addOnScrollListener () en su recyclerview. A continuación, dentro del oyente de desplazamiento implementar el código de abajo.
RecyclerView.OnScrollListener mScrollListener = new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (mIsLoading) return; int visibleItemCount = mLayoutManager.getChildCount(); int totalItemCount = mLayoutManager.getItemCount(); int pastVisibleItems = mLayoutManager.findFirstVisibleItemPosition(); if (pastVisibleItems + visibleItemCount >= totalItemCount) { //End of list } } };
No es mi aplicación es muy útil para StaggeredGridLayout
Uso
private EndlessScrollListener scrollListener = new EndlessScrollListener(new EndlessScrollListener.RefreshList() { @Override public void onRefresh(int pageNumber) { //end of the list } }); rvMain.addOnScrollListener(scrollListener);
Implementación de escuchas
class EndlessScrollListener extends RecyclerView.OnScrollListener { private boolean isLoading; private boolean hasMorePages; private int pageNumber = 0; private RefreshList refreshList; private boolean isRefreshing; private int pastVisibleItems; EndlessScrollListener(RefreshList refreshList) { this.isLoading = false; this.hasMorePages = true; this.refreshList = refreshList; } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); StaggeredGridLayoutManager manager = (StaggeredGridLayoutManager) recyclerView.getLayoutManager(); int visibleItemCount = manager.getChildCount(); int totalItemCount = manager.getItemCount(); int[] firstVisibleItems = manager.findFirstVisibleItemPositions(null); if (firstVisibleItems != null && firstVisibleItems.length > 0) { pastVisibleItems = firstVisibleItems[0]; } if (visibleItemCount + pastVisibleItems >= totalItemCount && !isLoading) { isLoading = true; if (hasMorePages && !isRefreshing) { isRefreshing = true; new Handler().postDelayed(new Runnable() { @Override public void run() { refreshList.onRefresh(pageNumber); } }, 200); } } else { isLoading = false; } } public void noMorePages() { this.hasMorePages = false; } void notifyMorePages() { isRefreshing = false; pageNumber = pageNumber + 1; } interface RefreshList { void onRefresh(int pageNumber); } }
- Soporte de SVG en Android, estado actual
- En pocas palabras ¿cuál es la diferencia de usar OAuth2 request getAuthToken y getToken