2015-01-22 15 views
10

kịch bản hiện tạiRecyclerView tách xem vẫn có thể nhìn thấy

Tôi đang sử dụng thư viện này https://github.com/kanytu/android-parallax-recyclerview để đạt được một hiệu ứng thị sai trên RecyclerView. Càng xa càng tốt. Tuy nhiên, tôi muốn nhận được một hiệu ứng như Google Newsstand nơi tiêu đề vẫn ở dưới các thẻ.

Vấn đề

Vấn đề là RecyclerView (hoặc LinerLayoutManager) tách header xem thời điểm các yếu tố đầu tiên của danh sách chạm đầu xem mẹ:

enter image description here

Như bạn có thể thấy khoảnh khắc cardview đầu tiên chạm đỉnh là thời điểm RecyclerView xóa bỏ tiêu đề.

Tôi chắc chắn rằng không có vấn đề gì trên bản thân logic tôi nhận được RecyclerView.findViewHolderForPosition(0) == null khi thẻ đạt đến đỉnh. Chứng minh rằng tiêu đề được tái chế.

Solutions Cố gắng

tôi đã cố gắng rất nhiều thứ như:

ViewHolder.setIsRecyclable sử dụng phương pháp này để thiết lập các cuộc phiêu lưu không tái chế không làm bất cứ hiệu lực.

LayoutManager.ignoreView Tôi đã cố đánh dấu chế độ xem là bị bỏ qua do quá trình vò và tái chế. Kết quả là một ngoại lệ cho biết: Trying to recycle an ignored view holder. You should first call stopIgnoringView(view) before calling recycle.

setItemViewCacheSize Không làm gì cả. Đã cố gắng gọi setItemViewCacheSize(50) và nó không làm bất cứ điều gì để tiêu đề.

setMaxRecycledViews Đã cố gắng đặt tối đa chế độ xem được tái chế với chế độ xemType = HEADER thành 0 và nó vẫn tái chế nó.

Kết luận

Vì vậy, tôi thắc mắc nếu có anyway để đánh dấu mục cho không nhận được tách ra cho đến khi tôi ra lệnh như vậy (như kiểm tra nếu nó vẫn còn có thể nhìn thấy và sau đó tách nó).

Ngoài ra còn có một vấn đề trên github về nó: https://github.com/kanytu/android-parallax-recyclerview/issues/7

+0

'setItemViewCacheSize' có ảnh hưởng đến nó không? https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html#setItemViewCacheSize(int) – darnmason

+0

@darnmason No. Nó dường như không có tác dụng gì. Không có 'getRecycledViewPool(). SetMaxRecycledViews()' –

+0

Tôi đoán đó là công việc của LayoutManager chứ không phải RecyclerView, có lẽ bạn sẽ cần một tùy chỉnh mà không bao giờ làm mất mục đầu tiên. – darnmason

Trả lời

1

Bạn có thể sử dụng CoordinatorLayout sự hỗ trợ thiết kế mới của thư viện với recyclerview của bạn và làm cho tác dụng tương tự với không có vấn đề như thế này.

kiểm tra liên kết này: http://android-developers.blogspot.com/2015/05/android-design-support-library.html

+0

Điều đó đòi hỏi rất nhiều thay đổi, bao gồm xóa toàn bộ thư viện và bắt đầu một thư viện mới, điều này sẽ không cần thiết vì đây là thư viện hỗ trợ. những gì nó dự định. Một sửa chữa tốt hơn có thể được lưu trữ bằng cách thay đổi LinearLayoutManager –

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