2015-02-13 15 views
5

Hãy nói rằng chúng tôi tập sau của mục Xem:Thông tư RecyclerView

View1 -> View2 -> View3 -> ... -> View(n-1) -> View(n) 

On RecyclerView cổ điển, View1 sẽ vào vị trí đầu tiên và View (n) trên ngoái. Bây giờ tôi muốn làm tròn đó nên sau khi vị trí cuối cùng, chúng tôi di chuyển một lần nữa để vị trí đầu tiên:

View1 -> View2 -> View3 -> ... -> View(n-1) -> View(n) -> View1 -> View2 -> ... 

này ở cái nhìn đầu tiên dường như đơn giản để thực hiện nhưng tôi không chắc chắn làm thế nào để thực hiện điều đó "thiết lập lại" sau khi View (n). Mọi lời khuyên sẽ thực sự hữu ích. Cảm ơn bạn.

Trả lời

0

Tôi chưa tự làm điều này, nhưng tôi nghĩ phương pháp này sẽ hiệu quả.

Trước tiên, bạn cần phải biết chế độ xem nào được đính kèm/hiển thị. Trình xử lý thay đổi phân cấp có thể thực hiện việc này hoặc chế độ xem tùy chỉnh làm giảm số lần xem mục của bạn. Dù sao, khi bạn đang ở gần một đầu của bộ điều hợp, bạn chỉ đơn giản là bắt đầu đặt theo dõi trong bạn; loại bỏ các mục từ đầu kia của bộ điều hợp và thêm chúng vào cuối này, gọi notifyRangeInserted và notifyRangeRemoved khi bạn làm điều này. Các khung nhìn đã loại bỏ và chèn vào sẽ nằm ngoài vùng hiển thị để không có hình động nào xảy ra, mặc dù đối với GridLayoutManager, bạn sẽ cần phải làm việc trong bội số của số cột.

Bạn sẽ phải suy nghĩ về những việc cần làm khi không có đủ nội dung để lấp đầy chế độ xem của người tái chế. Bạn cũng có thể muốn có ít nhất một vài mục trước khung nhìn tái chế khi nó cuộn, bạn có thể phải thêm các bản sao để làm điều này. Tôi muốn di chuyển ít nhất một màn hình nội dung trước một lúc.

Tôi tưởng tượng chỉ báo cuộn sẽ bị lỗi. Trình quản lý bố cục tùy chỉnh có thể cung cấp một chỉ báo khá tốt.

4

Vui lòng tham khảo this solution cho ListView. Bạn có thể viết RecyclerView.AdapterInteger.MAX_VALUE mục. Điểm khác biệt duy nhất là RecyclerView không còn có phương thức setSelectionFromTop nữa. Thay vào đó, bạn nên gọi số

recyclerView.getLayoutManager().scrollToPosition(recyclerAdapter.MIDDLE); 

để cuộn người tái chếXem đầu tiên ở giữa.