2015-09-23 19 views
8

Làm thế nào để kiểm tra xem một RecyclerView là cuộn, tức là, có những mục bên dưới/trên vùng hiển thịKiểm tra nếu RecyclerView là cuộn

Tôi có một thả xuống theo quan điểm tái chế của tôi mà hoạt động bằng cách sử dụng notifyItemRangeInserted()notifyItemRangeRemoved(). Bất cứ khi nào xảy ra điều này, tôi muốn kiểm tra xem có thể cuộn được RecyclerView hay không, vì tôi phải điều chỉnh chế độ xem khác, một biểu ngữ như trong quầy báo, theo đó

Trả lời

13

Có bạn đi:

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ũng Có cách nào để phát hiện số tiền mà nó là cuộn? Giả sử tất cả các mục không cùng kích thước – Sourabh

+0

@Sourabh mà không lặng lẽ tải tất cả các mục xem và đo chúng trong nền - tôi nghi ngờ điều đó. – Simas

+0

tuyệt vời, cảm ơn –

3

Ý tưởng là kiểm tra xem phần tử hiển thị hoàn toàn cuối cùng có phải là phần tử cuối cùng trong danh sách.

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

phải được sử dụng trong một 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

Tôi tìm thấy một giải pháp dễ dàng mà làm việc không phụ thuộc vào vị trí bạn đang ở trong danh sách:

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

Điều này hoạt động thực sự tốt hơn so với câu trả lời được chấp nhận! – Annihil

2

một này làm việc cho tôi .

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

gì về

// 1 = down; -1 = up; 0 = up or down 
recyclerView.canScrollVertically(0) 
Các vấn đề liên quan