8

Tôi đã có một RecyclerView trong scrollview như thế này:RecyclerView bên scrollview, một số mặt hàng không được hiển thị

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <!--other stuff--> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <android.support.v7.widget.RecyclerView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:visibility="gone"/> 

    </LinearLayout> 

    <!--other stuff--> 

</ScrollView> 

Và item 's RecyclerView là một RelativeLayout, bên trong đó có một EditText và quan điểm khác. Số điện thoại layout_height của số đó RelativeLayoutEditText là cả hai wrap_content. Người dùng có thể nhập vào đó EditText mà không có bất kỳ giới hạn độ dài/dòng sao cho chiều cao của mỗi mục là khác nhau.

Sau đó, tôi thấy rằng getItemCount() trong Adapter trả về giá trị thực nhưng onBindViewHolder() được gọi sai lần (ít hơn mức phải), do đó không đủ để hiển thị tất cả các mục.

Tôi thấy rằng điều này sẽ chỉ xảy ra nếu tôi viết recyclerView.setNestedScrollingEnabled(false). Nhưng tôi không thể loại bỏ dòng này. Bởi vì nếu tôi làm như vậy, RecyclerView sẽ không cuộn trơn tru và không hài hòa với các chế độ xem khác bên trong số ScrollViewScrollView chính nó.

Điều này xảy ra trên 6.0 nhưng không xảy ra trên 4.1.

Tôi đã liên lạc với Google tại trang này: https://code.google.com/p/android/issues/detail?id=213914 và anh ấy nói với tôi đây là bản sửa lỗi cho RecyclerView. Bạn có thể truy cập trang đó để bạn có thể hiểu câu hỏi và mục tiêu của tôi tốt hơn (Có một dự án mẫu nhỏ để hiển thị vấn đề ở đó). Tôi không đồng ý với anh ấy ngay cả bây giờ và tôi muốn giải quyết vấn đề. Xin vui lòng giúp đỡ, cảm ơn bạn trước.

+0

cố gắng đặt android: fillViewport = "true" trong scrollview –

+0

@LucasPaolillo Tốt, điều đó không có tác dụng. – ywwynm

+0

với android: fillViewPort = "true", thay đổi chiều cao bố cục tuyến tính thành match_parent –

Trả lời

42

Tôi tự tìm thấy giải pháp: thay thế ScrollView bằng NestedScrollView và giữ recyclerView.setNestedScrollingEnabled(false). Tôi không biết nếu đây là những gì NestedScrollView được thực hiện nhưng nó hoạt động.

THÔNG BÁO:

  1. NestedScrollView không phải là một đứa trẻ của ScrollView nhưng FrameLayout.
  2. Giải pháp này cũng sẽ mang lại một số lỗi với tự mô phỏng adjustResize.
+0

cảm ơn. làm việc như người ở. Tôi đã thay thế ScrollView bằng NestedScrollView và mọi thứ đều ổn. –

+2

cũng giúp tôi, cảm ơn '' 'setNestedScrollingEnabled (false);' '' rất quan trọng để giữ cho cuộn trơn tru – user2582318

+0

Bạn là GOD !!! : D Cảm ơn bạn –

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