6

Khi tôi đặt RecyclerView bên NestedScrollView sau đó onBindViewHolder đang kêu gọi tất cả các hàng như nói rằng tôi có danh sách trong đó có kích thước là 30 sau đó onBindViewHolder được gọi cho tất cả 30 hàng cùng một lúc ngay cả khi không di chuyểnRecyclerView bên NestedScrollView onBindViewHolder kêu gọi tất cả các kích thước getItemCount

RecyclerView list; 
    LinearLayoutManager layoutManager = new LinearLayoutManager(getContext()); 
     list.setLayoutManager(layoutManager); 
     layoutManager.setAutoMeasureEnabled(true); 
     list.setNestedScrollingEnabled(false); 
     list.addItemDecoration(new VerticalSpaceItemDecoration(5)); 
     list.setAdapter(adapter); 

xml của tôi là

<android.support.v4.widget.NestedScrollView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:fillViewport="true" 
    android:scrollbars="none" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 
<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/grey"> 
    <android.support.v7.widget.RecyclerView 
      android:id="@+id/recycler_views" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_below="@+id/info" 
      android:layout_marginBottom="5dp" 
      android:layout_marginLeft="5dp" 
      android:layout_marginRight="5dp" 
      android:textAlignment="center" 

      android:visibility="visible" 
      /> 

nhưng nếu tôi xóa NestedScrollView nó hoạt động bình thường.

+0

Bạn có tìm thấy giải pháp nào cho vấn đề này không, Điều này chắc chắn liên quan đến RecylerView bên trong NestedScrollView –

Trả lời

2

Tôi sẽ giả định rằng vì bạn đang sử dụng appbar_scrolling_view_behavior, bạn đang cố gắng làm điều gì đó với AppBarLayout.

Nếu có, bạn có thể sử dụng RecyclerView dưới dạng con trực tiếp của CoordinatorLayout và có hỗ trợ cuộn AppBarLayout mà không cần lồng vào RecyclerView bên trong NestedScrollView.

Hãy thử điều này: RecyclerView bên CoordinatorLayout (với AppBarLayout và CollapsingToolbarLayout):

<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/app_bar_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:fitsSystemWindows="true"> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/collapsing_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:layout_scrollFlags="scroll"> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="80dp" 
       android:background="#55FF00FF" 
       app:layout_collapseMode="none"/> 

     </android.support.design.widget.CollapsingToolbarLayout> 
    </android.support.design.widget.AppBarLayout> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 
</android.support.design.widget.CoordinatorLayout> 

Và trong hoạt động của bạn hoặc CustomView:

RecyclerView list; 
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext()); 
list.setLayoutManager(layoutManager); 
list.addItemDecoration(new VerticalSpaceItemDecoration(5)); 
list.setAdapter(adapter); 
1

Nhưng bạn thiết android: layout_height cho NestedScrollView đến wrap_content - ở đây, số không theo mặc định (vì không có nội dung nào cho anh ấy tại thời điểm khai báo). Tiếp theo, đối với RecyclerView bạn đặt android: layout_height đến match_parent - hiện tại là 0. Vì vậy, tất cả các mục của bạn đều có chiều cao là 0.

Vì vậy, bạn có tình huống như vậy. Giải pháp : sử dụng giải pháp ở trên từ @dkarmazi https://stackoverflow.com/a/37558761/3546306 hoặc cố gắng thay đổi thông số android: layout_height.

3

Sự cố gây ra vấn đề về độ cao.

1) Chỉnh sửa NestedScrollView & RecyclerView như sau:

<android.support.v4.widget.NestedScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true" 
    ...... 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 
     ....... 
     <android.support.v7.widget.RecyclerView 
      android:id="@+id/recycler_views" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      ..... 
      /> 

2) Hãy chắc chắn rằng bạn đã biên soạn 'com.android.support:recyclerview-v7:23.2.1'

+0

Bạn đã thử chưa? Ví dụ, đặt "Log.d (...)" bên trong "onBindViewHolder". Tôi nghĩ đây không phải là lý do – BNK

1

Đó là right.Because bạn đang sử dụng một ScrollView. ScrollView không thể tái chế như RecyclerView hoặc ListView. Nó sẽ hiển thị tất cả các chế độ xem có chứa các màn hình này trong cùng một thời gian. Thay vào đó, bạn nên sử dụng bố cục khác.

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