2

Ich habe eine RelativeLayout innerhalb meiner CoordinatorLayout (wie unten gezeigt). Beachten Sie auch, dass innerhalb der ich eine RecyclerView habe.RelativeLayout in CoordinatorLayout scrollt nicht

Allerdings, wenn ich scrollen, kann ich blättern nur auf dem RecyclerView und nur der RecyclerView Teil des Bildschirms tatsächlich bewegen wird. Wenn ich versuche, im Layout über dem RecyclerView zu scrollen, scrollt es den Bildschirm überhaupt nicht. Hier ist eine Illustration, die ich gemacht, was los ist:

Demo

Also meine Frage ist, warum kann ich nicht bewegen auf der inneren RelativeLayout? Soll ich meine Layouts anders organisieren?

Hier ist mein Layout:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:openDrawer="start"> 

    <android.support.design.widget.CoordinatorLayout 
     android:id="@+id/main_content" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

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

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       android:background="?attr/colorPrimary" 
       app:layout_scrollFlags="scroll|enterAlways" 
       app:popupTheme="@style/AppTheme.PopupOverlay" /> 

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

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

      <RelativeLayout 
       android:id="@+id/header" 
       android:layout_width="match_parent" 
       android:layout_height="250dp"> 

       // some imageviews and textviews 

      </RelativeLayout> 

      <android.support.v7.widget.RecyclerView 
       android:id="@+id/recycler_view" 
       android:scrollbars="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_below="@+id/header" /> 

     </RelativeLayout> 

     <android.support.design.widget.FloatingActionButton 
      android:id="@+id/fab" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom|end" 
      android:layout_margin="@dimen/fab_margin" /> 

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

    <android.support.design.widget.NavigationView 
     android:id="@+id/nav_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:fitsSystemWindows="true" 
     app:headerLayout="@layout/nav_header_drawer" 
     app:menu="@menu/menu_navigation_drawer" /> 

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

Wie kann ich dieses Problem beheben?

Antwort

0

RelativeLayout kann nicht gescrollt werden, wenn es sich nicht in einer Scrollbaren Ansicht befindet.
Versuchen Sie, Ihre RelativeLayout als Header Ihrer RecyclerView.

In diesem Beispiel werden Sie in der Lage sein Inhalt

<ScrollView 
    ... 
    ...> 
     <!-- Scrollable Contents --> 
</ScrollView> 

In Ihrem Fall denke ich, die beste Art und Weise zu lassen ist Ihr RecyclerView nehmen den ganzen Bildschirm und weisen Sie dann die Kopfzeile zu scrollen. Befolgen Sie diese link oder this. Es gibt viele da draußen, so dass es nur google

0

Ordnung, kann dieser recyclerview und setzen Sie Ihren Kopf relativelayout als ein Element der recyclerview mit einzelnem erfolgen.

Können Sie sich mit der Methode getItemViewType vertraut machen, die verwendet wird, um den Artikeltyp RecyclerView-Artikel zu bestimmen.

Fügen Sie Daten zu Ihrem dataset hinzu, mit dem Sie den Typ eines Artikels bestimmen. Betrachten wir folgende Beispiel ...

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

    private final int ITEM_ROW = 1; 
    private final int ITEM_HEADER = 2; 

    // Will be your dataset which will be containing first item as relativeLayout payload. 
    private ArrayList<Object> mData; 

    public MyRecyclerViewAdapter(ArrayList<Object> mData) { 
     this.mData = mData; 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     RecyclerView.ViewHolder vh = null; 
     if (viewType == ITEM_ROW) { 
      // Inflate your row item of recyclerview here... 

      View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_checkout_review_cart_item, parent, false); 
      vh = new ItemHolder(view); 
     } else if (viewType == ITEM_HEADER) { 

      // Inflate your relativeLayout here... 

      View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_order_detail_grand_total_item, parent, false); 
      vh = new RelativeLayoutHolder(view); 
     } 
     return vh; 
    } 

    @Override 
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) { 
     if (holder instanceof ItemHolder) { 

      // Bind item of recyclerview here... 

     } else if (holder instanceof RelativeLayoutHolder) { 

      // Bind data of your relativeLayout 

     } 
    } 

    @Override 
    public int getItemCount() { 
     return mData.size(); 
    } 

    @Override 
    public int getItemViewType(int position) { 
     // Decide type of an item using payload instances.. 
     Object obj = mData.get(position); 
     if (obj instanceof ItemInfo) { 
      return ITEM_ROW; 
     } else if (obj instanceof RelativeLayoutInfo) { 
      return ITEM_HEADER; 
     } else { 
      return -1; 
     } 
    } 

    class ItemHolder extends RecyclerView.ViewHolder { 

     ItemHolder(View itemView) { 
      super(itemView); 
     } 
    } 

    class RelativeLayoutHolder extends RecyclerView.ViewHolder { 

     RelativeLayoutHolder(View itemView) { 
      super(itemView); 
     } 
    } 
} 

Ihre Payload of dataset wird itemType entscheiden. Zwei Typen von Pojo werden in Ihre dataset - RelativeLayoutInfo und ItemInfo eingefügt. Ein Beispiel

public class ItemInfo implements Serializable { 

    // Consider adding object and getter setter here 
} 

und

public class RelativeLayoutInfo implements Serializable { 

    // Consider adding object and getter setter here 
} 

Dort gehen Sie. Ihre relativeLayout wird als ein Artikel recyclerview hinzugefügt. Glückliche Codierung !!

Verwandte Themen