2017-02-13 5 views
0

Ich habe viele Beiträge gesurft, konnte aber nicht das bekommen, was ich brauchte. Ich habe ein LinearLayout mit einer RecyclerView, und ich möchte beide scrollen. Jetzt ist das LinearLayout fest und das RecyclerView ist das einzige, das scrollt. Ich habe versucht mit NestedScrollview, konnte es aber nicht funktionieren. Aus irgendeinem Grund bricht der recyclerview.adapter mit nestedscrollview ab. Irgendeine Idee? btw: IchLinearLayout und RecyclerView werden nicht zusammen scrollen

in Xamarin Android Entwicklung Das ist mein Plan

<LinearLayout 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     ... 
    </LinearLayout> 
    <FrameLayout 
     android:id="@+id/navigation" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</LinearLayout> 

Dann lade ich ein Fragment in der framelayout das Layout ist:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<ProgressBar 
    android:id="@+id/spinner" 
    style="?android:attr/progressBarStyleLarge" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" /> 
<android.support.v4.widget.SwipeRefreshLayout 
    android:id="@+id/refresher" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView" 
     android:scrollbars="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 
</android.support.v4.widget.SwipeRefreshLayout> 
<TextView 
    android:id="@+id/empty_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 
</LinearLayout> 

Antwort

0

LinearLayouts selbst nicht scroll, sie dienen nur dazu, eine Ansicht nach der anderen linear zu organisieren. Wenn Sie eine Rolle scrollen möchten, müssen Sie sie in einer ScrollView einbetten.

In Anbetracht dessen, was Sie erreichen wollen, weiß ich nicht, dass die Verschachtelung eines RecyclerView in einem ScrollView funktionieren wird. (Ich habe das nicht bestätigt)

Was ist das Verhalten, das Sie mit dem LinearLayout suchen? Soll es Kopf- und Fußzeilen enthalten? Wenn dies der Fall ist, können Sie besser mit einzigartigen ViewHolders für Ihr RecyclerView arbeiten (d. H. Eine für Ihre Kopfzeile, eine für Ihre Fußzeile und eine dritte für Ihren normalen Inhalt). Dann ermittelt Ihr Adapter, welcher ViewHolder-Typ basierend auf seinem Index angezeigt wird. (zB 0 -> Kopfzeile, n + 2 -> Fußzeile, 1: n-1 -> Inhalt (um 1))

Wenn Sie nur nach einer statischen Kopfzeile suchen (dh eine, die nicht scrollt mit dem Rest des Inhalts, können Sie das ziemlich leicht erreichen:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:weightSum="5"> 

    <!-- Replace this with your header view --> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:text="Your Header" /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="4" > 

     <android.support.v4.widget.SwipeRefreshLayout 
      android:id="@+id/refresher" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

      <android.support.v7.widget.RecyclerView 
       android:id="@+id/recyclerView" 
       android:scrollbars="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="fill_parent" /> 
     </android.support.v4.widget.SwipeRefreshLayout> 

     <ProgressBar 
      android:id="@+id/spinner" 
      style="?android:attr/progressBarStyleLarge" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" /> 
    </RelativeLayout> 
</LinearLayout> 

Diese Ihnen eine Header Ansicht geben, die mit 1 einnehmen werden/5. der Gesamthöhe der enthaltenden Ansicht der RecyclerView (einschließlich seinem enthalten. Ansicht und der Fortschrittsbalken) sind in einer Ansicht, die die verbleibenden 4/5 der Gesamthöhe der enthaltenden Ansicht umfasst.

+0

Es ist eine Kopfzeile, aber in Anbetracht meiner Lösung ist es nicht die beste Idee, eine Header-Ansicht zu erstellen r für die Recyclerview. Ich habe das LinearLayout verwendet, um die Ansichten zu organisieren. Semantisch ist ein Header. Empfiehlst du, LinearLayout in ein anderes Layout zu ändern? –

+0

Es kommt darauf an. Soll die Kopfzeile beim Scrollen verschwinden? Oder willst du, dass es immer präsent ist? Soll die Fußzeile nur angezeigt werden, wenn Sie nach unten geblättert haben? Sie könnten das LinearLayout * ohne * eine ScrollView behalten, die Kopfzeile dort einfügen und nur das zweite Element RecyclerView haben (das alleine scrollt). Warum ist die Definition von Header ViewHolders keine ideale Lösung für Sie? – themarshal

+0

Angenommen, ich möchte, dass es wie ein erster Artikel ist. Ich will nicht, dass es verschwindet, nur um oben zu sein. Das Definieren einer Kopfzeile ViewHolder ist nicht ideal, da die Recycleransicht eine Komponente ist, die ich in anderen Ansichten verwende, und in den anderen möchte ich die Kopfzeile nicht. Es ist kompliziert, wenn Sie die Lösung nicht kennen, aber vertrauen Sie mir, es ist besser, es getrennt zu machen. Ich habe keine Fußzeile, nur Kopfzeile. Ich verstehe die Lösung nicht, die Sie mir geben, haben Sie ein Beispiel/Tutorial? Vielen Dank! –

Verwandte Themen