Проверьте, является ли RecyclerView прокручиваемым

Как проверить, прокручивается ли RecyclerView , т. Е. Есть элементы ниже / выше видимой области

У меня есть раскрывающийся список в моем просмотре recycler, который работает, используя notifyItemRangeInserted() и notifyItemRangeRemoved() . Всякий раз, когда это происходит, я хочу проверить, прокручивается ли RecyclerView или нет, поскольку мне нужно настроить другое представление, например баннер, например, в газетном киоске

Там вы идете:

 public boolean isRecyclerScrollable() { LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); RecyclerView.Adapter adapter = recyclerView.getAdapter(); if (layoutManager == null || adapter == null) return false; return layoutManager.findLastCompletelyVisibleItemPosition() < adapter.getItemCount() - 1; } 

Я нашел простое решение, которое работает независимо от позиции, которую вы находитесь в списке:

 public boolean isRecyclerScrollable(RecyclerView recyclerView) { return recyclerView.computeHorizontalScrollRange() > recyclerView.getWidth() || recyclerView.computeVerticalScrollRange() > recyclerView.getHeight(); } 

Идея состоит в том, чтобы проверить, является ли последний полностью видимый элемент последним элементом в списке.

 private boolean isScrollable() { return mLinearLayoutManager.findLastCompletelyVisibleItemPosition() + 1 == mRecyclerViewAdapter.getItemCount(); } 

Это работает для меня.

 recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); boolean isRecylerScrollable = recyclerView.computeHorizontalScrollRange() > recyclerView.getWidth(); if(isRecylerScrollable){ //do something } }); } 
 boolean isScrollable() { LinearLayoutManager layoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager(); int itemCount = mRecyclerView.getAdapter().getItemCount(); return !(itemCount == 0 || (layoutManager.findFirstCompletelyVisibleItemPosition() == 0 && layoutManager.findLastCompletelyVisibleItemPosition() == itemCount - 1)); }