0

Ich habe ein Fragment mit einem CoordinatorLayout und FrameLayout, um es mit anderen Fragmenten zu füllen. Eines dieser Fragmente enthält einen RecyclerView. Meine Frage ist, wie RecyclerView mit CoordinatorLayout arbeiten kann, von denen jeder in einer Datei ist. Ich habe versucht, eine NestedScrollView als Fragment Eltern, aber wenn ich dies tun "onBindViewHolder" des Adapters RecyclerView wird für alle Elemente aufgerufen.CoordinatorLayout mit RecyclerView in verschiedenen Fragmenten

Haupt Fragment enthält die CoordinatorLayout

<android.support.design.widget.CoordinatorLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    android:background="@color/background"> 

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

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:minHeight="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
      android:elevation="0dp" 
      app:layout_scrollFlags="scroll|enterAlwaysCollapsed"/> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tab_layout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/toolbar" 
      android:background="@color/colorTab" 
      android:minHeight="?attr/actionBarSize" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

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

    <FrameLayout 
     android:id="@+id/container_restaurant" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

</android.support.design.widget.CoordinatorLayout> 

Fragment mit RecyclerView

<android.support.v4.widget.NestedScrollView 
    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:fillViewport="true" 
    android:background="@color/background" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/my_list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

</android.support.v4.widget.NestedScrollView> 

Auf diese Weise die Scroll-Werke, aber die "onBindViewHolder" für alle aufgeführten Punkte genannt werden, sind diejenigen, die darunter nicht " sichtbar". Wenn ich ein LinearLayout anstelle von NestedScrollView verwende, funktioniert der "onBindViewHolder" richtig, aber das Scroll-Verhalten ("@ string/appbar_scrolling_view_behavior") mit CoordinatorLayout funktioniert nicht.

+0

Wenn Sie '' NestedScrollView' RecyclerView' zu wickeln. Recycling-Funktion wird nicht funktionieren. Und es wird mehr Speicher und Verzögerungen benötigen. – wonsuc

Antwort

0

ScrollView zeichnet alle untergeordneten Elemente. Das bedeutet, dass Ihr Recyclerview seine Recycling-Eigenschaften verliert, wenn es sich in einem Scrollview befindet. Deshalb wird onBindViewHolder für alle Elemente aufgerufen. Es ist auch falsches Verhalten.

Versuchen Eltern als FrameLayout mit Scroll-Verhalten zu halten ("@ String/appbar_scrolling_view_behavior")

+0

Ich verstehe, aber ändern NestedScrollView von FrameLayout nicht für Scroll-Verhalten. Es funktioniert, wenn FrameLayout in der gleichen Datei wie CoordinatorLayout ist. –

+0

Versuchen Sie, die Höhe Ihres FrameLayout (das in coordinatorlayout vorhanden ist) in 'match_parent' zu ändern. – jitinsharma

+0

Hat nicht funktioniert. Ich denke, das Problem ist das NestedScrollView, wenn ich es benutze, werden alle Elemente in onBindViewHolder geladen. Ich habe versucht, die Höhe von NestedScrollView nicht funktioniert. Gibt es ein anderes Layout, das ich anstelle von NestedScrollView verwenden könnte und ein Scroll-Verhalten hat? –