2015-09-23 1 views
8

Wie kann man überprüfen, ob ein RecyclerView scrollbaren ist, das heißt, es gibt Elemente unter/über dem sichtbaren BereichÜberprüfen Sie, ob RecyclerView scrollbaren ist

Ich habe ein Drop-Down in meinem Recycler Ansicht, die unter Verwendung notifyItemRangeInserted() und notifyItemRangeRemoved() arbeitet. Jedes Mal, wenn irgendetwas davon geschieht, mag ich überprüfen, ob die RecyclerView scrollbaren ist oder nicht, da ich eine andere Ansicht neu einstellen muß, ein Banner wie in Kiosk, entsprechend

Antwort

13

Dort gehen Sie:

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

Gibt es auch einen Weg, um die Menge zu erfassen, durch die sie scrollbaren ist? Vorausgesetzt, alle Artikel sind nicht von der gleichen Größe – Sourabh

+0

@Sourabh ohne ruhig alle Artikel Ansichten zu laden und messen sie im Hintergrund - ich bezweifle es. – Simas

+0

genial, danke –

3

Die Idee, wenn das letzte vollständig sichtbare Element zu überprüfen ist, die ist letztes Element in der Liste.

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

muss in einem Handler verwendet werden –

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

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

fand ich eine einfache Lösung, die unabhängig von der Position arbeitet Sie in der Liste sind:

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

Das funktioniert in der Tat besser als die angenommene Antwort! – Annihil

2

Dieses ist für mich funktioniert .

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

Was

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