2015-05-20 19 views
6

Tôi đang làm việc với RecyclerView và LinearLayoutManager tương ứng. Tôi đã thêm một số tính năng cuộn tùy chỉnh cho một phần ứng dụng của mình, nơi tôi sẽ dịch đối tượng tiêu đề tùy chỉnh cùng với cuộn của RecyclerView được mô hình hóa sau dự án này: https://github.com/boxme/ParallaxHeaderViewPager (sử dụng ListView thay vì RecyclerView).RecyclerView LinearLayoutManager computeVerticalScrollOffset() không trả về giá trị đúng

Tôi đã gặp sự cố lạ. Nó sẽ di chuyển tốt trong một thời gian nhưng sau đó nó sẽ nhảy một vài trăm điểm ảnh. Tôi đã thêm các câu lệnh log để xem offset được tính toán bởi LinearLayoutManager.computeVerticalScrollOffset() khi tôi cuộn đủ chắc chắn, độ lệch được nhảy ngẫu nhiên từ 320 đến 1200, sau đó nó sẽ tiếp tục tính toán bù đắp một cách thích hợp từ thời điểm đó.

Xem câu trả lời của tôi bên dưới về cách tôi giải quyết vấn đề này!

Trả lời

5

Sự cố đã kết thúc là một thực tế rằng tôi có một mục vô hình rất lớn trong danh sách của mình, sau đó là một loạt các mục nhỏ hơn. Nó chỉ ra rằng LinearLayoutManager.computeVerticalScrollOffset() mất chiều cao hàng trung bình vào tài khoản khi tính toán. Điều này gây ra một vấn đề đối với tôi vì mục lớn ở trên đầu đã ném ra chiều cao trung bình của các hàng. Tôi đã kết thúc giải quyết điều này bằng cách thêm một vài mục nhỏ hơn vô hình trên đầu thay vì một lớn để giữ chiều cao hàng trung bình chính xác.

Tôi hy vọng điều này sẽ giúp bất kỳ ai gặp phải vấn đề tương tự!

+1

Thay vì làm điều đó, bạn có thể ghi đè 'computeVerticalScrollOffset',' extent' và 'range' để có giải pháp rẻ hơn và phù hợp hơn. – yigit

+0

Đó là một ý tưởng tuyệt vời! Tôi đã có một chút cảnh giác về việc ghi đè các phương thức RecyclerView và LayoutManager vì các lớp vẫn còn tương đối mới và có thể thay đổi đáng kể trong tương lai. Tôi đồng ý giải pháp của tôi là ở phía bên hackier nhưng ít nhất nó vẫn hoạt động nếu lớp thay đổi trong tương lai :) – rakoonise

+0

Những phương pháp đó là gương từ View nên rất rất khó có thể thay đổi. Ngoài ra, khi chúng tôi thay đổi phương pháp công khai, chúng tôi cố gắng làm cho nó tương thích ngược nếu có thể – yigit

Các vấn đề liên quan