2017-01-05 14 views
10

Tôi vừa cập nhật từ thư viện hỗ trợ recyclerview-v7: 23.1.1 để recyclerview-v7: 25.1.0.Recyclerview onBindViewHolder được gọi cho tất cả các mục khi bên trong LinearLayout với trọng số

Bố cục của tôi chứa 2 recylerview được chia nhỏ 50% trên màn hình. Mã xml như sau:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView1" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:scrollbars="none"/> 

    <android.support.v4.widget.Space 
     android:layout_width="@dimen/two_dp" 
     android:layout_height="match_parent" 
     android:background="@color/dark_gray"/> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView2" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:scrollbars="none"/> 

</LinearLayout> 

Bây giờ onBindViewHolder được gọi là cho tất cả các mục danh sách thay vì chỉ các thành phần có thể nhìn thấy. Điều này bắt đầu xảy ra sau khi cập nhật để hỗ trợ thư viện 25.1.0.

Nó hoạt động tốt nếu trọng lượng bị loại bỏ, nhưng cần có 2 recylcerviews cạnh nhau.

Làm cách nào để yêu cầu recyclerview tái chế chế độ xem thay vì tải tất cả?

CẬP NHẬT: Tính năng này hoạt động tốt trên các thiết bị Marshmallow trở lên. Vấn đề có trong Lollipop hoặc dưới đây. Bạn có thể tìm thấy một dự án demo tại đây:https://bitbucket.org/aniketit/recyclerviewtest

+1

đăng mã có liên quan trên mãBindViewHolder –

+0

@BradleyWilson onBindViewHolder được gọi là bất kể mã bên trong nó. Tôi đã thử với một hàm onBindViewHolder rỗng. –

+0

okay, thật lạ lùng. Tôi có thể không thực sự giúp đỡ nhiều với chỉ xml để RecyclerViews của bạn, bạn có thể gửi bất kỳ mã bạn cảm thấy có liên quan hoặc có thể gây ra vấn đề (bố trí hàng mục vv vv) –

Trả lời

4

Tôi đã gặp sự cố tương tự vẫn tồn tại sau khi xóa các phần tử có trọng số và 0dp. Trong trường hợp của tôi, vấn đề là khá tầm thường - tôi đã vô tình đặt RecyclerView của tôi bên trong một NestedScrollView với fillViewPort = true. Điều này làm cho Adapter sẽ xây dựng tất cả các phần tử cho khung nhìn và bạn sẽ nhận thấy sự chậm trễ đáng kể trong phản hồi.

Tắt vấn đề sẽ xảy ra nếu bạn chỉ có RecyclerView trong một ScrollView cũ đồng bằng.

2

Tôi gặp vấn đề tương tự. RecyclerView đã được tái chế tốt trong Marshmallow nhưng không phải trước đây.

Sai lầm của tôi là đặt RecyclerView của tôi vào trong ScrollView. Bạn nên kiểm tra xem bạn có một scrollview, nếu có, loại bỏ nó và vấn đề của bạn sẽ được giải quyết cho các thiết bị marshmallow trước.

1

Với thư viện> hơn 23.1.1 bạn có thể xóa

android: layout_width = "0dp"

gỡ bỏ nó và tất cả các hoạt động hoàn hảo.

+1

Điều này giải quyết được vấn đề cho tôi!Tôi đặt layout_width = "match_parent" cho cả hai bố cục có trọng số của tôi thay vì 0dp và nó hoạt động bình thường ngay bây giờ. –

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