2015-09-23 17 views
8

Come verificare se un RecyclerView è scorrevole, vale a dire, non ci sono elementi di sotto/sopra l'area visibileControllare se RecyclerView è scorrevole

ho una discesa a mio avviso riciclatore che funziona utilizzando notifyItemRangeInserted() e notifyItemRangeRemoved(). Ogni volta che succede questo, voglio controllare se lo RecyclerView è scorrevole o no, come devo regolare un'altra vista, un banner come in edicola, di conseguenza

risposta

13

Ci si va:

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

C'è anche un modo per rilevare l'importo per il quale è scorrevole? Supponendo tutti gli elementi non sono di stessa dimensione – Sourabh

+0

@Sourabh senza tranquillamente caricare tutti i punti di vista voce e misurarli in background - ne dubito. – Simas

+0

impressionante, grazie –

3

L'idea è di verificare se l'ultimo elemento completamente visibile è il ultimo elemento nell'elenco.

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

deve essere utilizzato in un gestore –

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

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

Ho trovato una soluzione semplice che funziona indipendentemente dalla posizione ci si trova nella lista:

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

questo funziona davvero meglio che la risposta accettata! – Annihil

2

Questo funziona per me .

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

Che dire

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