6

Quando metto RecyclerView all'interno NestedScrollView poi onBindViewHolder chiede tutto fila come dire che ho lista che ha dimensioni di 30 poi onBindViewHolder è chiamato per tutte le 30 righe contemporaneamente anche senza scorrereRecyclerView all'interno NestedScrollView onBindViewHolder chiamando per tutto il formato 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); 

mio xml è

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

ma se rimuovo NestedScrollView funziona correttamente.

+0

Hai trovato qualche soluzione per questo problema, Questo è sicuramente correlato a RecylerView all'interno di NestedScrollView –

risposta

2

Presumo che dal momento che stai usando appbar_scrolling_view_behavior stai provando a fare qualcosa con AppBarLayout.

In tal caso, è possibile utilizzare RecyclerView come figlio diretto di CoordinatorLayout e disporre del supporto per lo scorrimento AppBarLayout senza nidificare RecyclerView all'interno di NestedScrollView.

Prova questo: RecyclerView all'interno CoordinatorLayout (con AppBarLayout e 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> 

E nella vostra attività o CustomView:

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

Ma si imposta Android: layout_height per NestedScrollView a wrap_content - qui, è zero per impostazione predefinita (perché non ci sono contenuti per lui al momento della dichiarazione). Successivamente, per RecyclerView hai impostato android: layout_height a match_parent - che al momento è 0. Quindi, tutti i tuoi articoli hanno altezza 0.

Quindi, avete una tale situazione. Soluzione: utilizzare la soluzione precedente da @dkarmazi https://stackoverflow.com/a/37558761/3546306 o provare a modificare il parametro valori di android: layout_height.

3

Problema causato per il problema di altezza.

1) Modificare il NestedScrollView & RecyclerView come segue:

<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) Assicurarsi di aver compilato 'com.android.support:recyclerview-v7:23.2.1'

+0

Hai già provato? Ad esempio, mettendo "Log.d (...)" all'interno di "onBindViewHolder". Penso che questa non sia la ragione – BNK

1

E 'right.Because si utilizza un ScrollView. ScrollView non è riciclabile come RecyclerView o ListView. Mostrerà tutte le viste contiene queste fuori schermo in una volta. Dovresti invece usare un altro layout.

Problemi correlati