2015-09-23 2 views
8

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

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

ответ

13

Там вы идете:

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; 
} 
+0

Существует также способ обнаружения сумму, на которую он прокручивать? Предполагая, что все предметы не одинакового размера – Sourabh

+0

@Sourabh без потихоньку загружает все виды предметов и измеряет их в фоновом режиме - я сомневаюсь. – Simas

+0

awesome, thanks –

3

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

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

должен быть использован в обработчике –

0
boolean isScrollable() { 
    LinearLayoutManager layoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager(); 
    int itemCount = mRecyclerView.getAdapter().getItemCount(); 

    return !(itemCount == 0 || 
    (layoutManager.findFirstCompletelyVisibleItemPosition() == 0 && 
    layoutManager.findLastCompletelyVisibleItemPosition() == itemCount - 1)); 
} 
7

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

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

Это работает действительно лучше, чем принятый ответ! – Annihil

2

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

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 
      } 
    }); 
} 
0

насчет

// 1 = down; -1 = up; 0 = up or down 
recyclerView.canScrollVertically(0) 
Смежные вопросы