2015-09-23 16 views
8

Jak sprawdzić, czy RecyclerView jest przewijane, czyli istnieją pozycje poniżej/powyżej widocznego obszaruSprawdź, czy RecyclerView jest przewijane

Mam rozwijaną moim zdaniem recyklera, który działa za pomocą notifyItemRangeInserted() i notifyItemRangeRemoved(). Ilekroć tak się stanie, chcę sprawdzić, czy RecyclerView jest przewijany, czy nie, ponieważ muszę dostosować inny widok, baner jak w kiosku, odpowiednio

Odpowiedz

13

Nie idziesz:

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

Jest tam również sposób na wykrycie kwotę, o którą jest ona przewijane? Zakładając, że wszystkie przedmioty nie są tego samego rozmiaru, – Sourabh

+0

@Sourabh bez cichego ładowania wszystkich widoków przedmiotów i mierzenia ich w tle - wątpię w to. – Simas

+0

niesamowite, dzięki –

3

Chodzi o sprawdzenie, czy ostatni całkowicie widoczny element jest ostatni element na liście.

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

muszą być stosowane w Handler –

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

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

znalazłem proste rozwiązanie, które działa niezależnie od położenia jesteś w liście:

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

To działa rzeczywiście lepiej niż zaakceptowana odpowiedź! – Annihil

2

Ten działa dla mnie .

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

Co

// 1 = down; -1 = up; 0 = up or down 
recyclerView.canScrollVertically(0)