6

kiedy kładę RecyclerView wewnątrz NestedScrollView następnie onBindViewHolder dzwoni do wszystkich rzędu jak powiedzieć mam listy, który ma rozmiar 30 następnie onBindViewHolder nazywany jest dla wszystkich 30 wierszy w jednym czasie nawet bez przewijaniaRecyclerView wewnątrz NestedScrollView onBindViewHolder wzywając do wszystkich rozmiarów 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); 

mój xml jest

<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" 
      /> 

, ale jeśli usuniemy NestedScrollView, to działa poprawnie.

+0

Czy znalazłeś rozwiązanie tego problemu, Jest to zdecydowanie związane z RecylerView wewnątrz NestedScrollView –

Odpowiedz

2

Założę się, że od kiedy używasz appbar_scrolling_view_behavior, próbujesz coś zrobić z AppBarLayout.

Jeśli tak, możesz użyć programu RecyclerView jako bezpośredniego elementu potomnego CoordinatorLayout i mieć obsługę przewijania AppBarLayout bez zagnieżdżania RecyclerView wewnątrz NestedScrollView.

Spróbuj: RecyclerView wewnątrz CoordinatorLayout (z AppBarLayout i 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> 

aw swojej działalności lub CustomView:

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

Ale ustawić androida: layout_height dla NestedScrollView do wrap_content - tutaj domyślnie jest zero (ponieważ nie ma dla niego treści w moment deklaracji). Następnie dla RecyclerView ustawiamy android: layout_height na match_parent - która w tej chwili jest równa 0. W ten sposób wszystkie twoje przedmioty mają 0 wysokości.

Tak więc masz taką sytuację. Rozwiązanie: użyj powyższego rozwiązania z @dkarmazi https://stackoverflow.com/a/37558761/3546306 lub spróbuj zmienić parametry android: layout_height wartości.

3

Problem spowodowany problemem wysokości.

1) Edycja NestedScrollView & RecyclerView następująco:

<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) Upewnij się, że masz skompilowany 'com.android.support:recyclerview-v7:23.2.1'

+0

Czy próbowałeś już? Na przykład umieszczenie "Log.d (...)" wewnątrz "onBindViewHolder". Myślę, że to nie jest powód – BNK

1

To right.Because używasz ScrollView. ScrollView nie nadaje się do powtórnego przetworzenia, jak RecyclerView lub ListView. Pokaże cały widok zawierający te elementy poza ekranem. Zamiast tego należy użyć innego układu.