5

Utworzyłem układ, który ma dwa widoki RecyclerView. Jeden przewija się w poziomie, podczas gdy inne przewijają się pionowo. Mogę przewijać prawidłowo wewnątrz każdego RecyclerView, ale strona jako całość nie przewinie się, tzn. Góra RecyclerView pozostaje zawsze na górze, a dolna pozostaje na dole, tak jak obie są ustalone na miejscu.Scolling with multiple RecyclerViews w layoucie

Poniżej mój układ xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

     <EditText 
      android:id="@+id/search" 
      android:layout_width="fill_parent" 
      android:layout_height="50dp" 
      android:hint="Search Dramas" 
      android:textSize="16sp" 
      android:paddingLeft="10dp" 
      android:gravity="center" 
      android:textColor="@color/dark_grey" 
      android:textColorHint="@color/dark_grey" 
      android:background="@drawable/border_bottom"/> 


     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@drawable/border_bottom_background_black" 
      android:textColor="@color/white" 
      android:padding="10dp" 
      android:text="Most Watched"/> 

     <!-- A RecyclerView to display horizontal list --> 
     <android.support.v7.widget.RecyclerView 
      android:id="@+id/featured" 
      android:scrollbars="none" 
      android:layout_width="fill_parent" 
      android:layout_height="240dp" 
      android:paddingLeft="0dp" 
      android:paddingRight="15dp" 
      android:paddingTop="15dp" 
      android:paddingBottom="25dp" 
      android:background="@color/black"/> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@drawable/border_bottom_backgroundless" 
      android:textColor="@color/dark_grey" 
      android:padding="10dp" 
      android:text="All Dramas"/> 

     <!-- A RecyclerView to display vertical list --> 
     <android.support.v7.widget.RecyclerView 
      android:id="@+id/pick_item" 
      android:scrollbars="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="match_parent"/> 


</LinearLayout> 

How activity looks

Odpowiedz

6

Udało mi się rozwiązać problem, umieszczając wszystko wewnątrz ScrollView, a następnie ustawiając wysokość pionowej RecyclerView ręcznie/programowo.

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/scrollView"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

      <EditText 
       android:id="@+id/search" 
       android:layout_width="fill_parent" 
       android:layout_height="50dp" 
       android:hint="Search Dramas" 
       android:textSize="16sp" 
       android:paddingLeft="10dp" 
       android:gravity="center" 
       android:textColor="@color/dark_grey" 
       android:textColorHint="@color/dark_grey" 
       android:background="@drawable/border_bottom"/> 


      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="@drawable/border_bottom_background_black" 
       android:textColor="@color/white" 
       android:padding="10dp" 
       android:text="Most Watched"/> 

      <!-- A RecyclerView to display horizontal list --> 
      <android.support.v7.widget.RecyclerView 
       android:id="@+id/featured" 
       android:scrollbars="none" 
       android:layout_width="fill_parent" 
       android:layout_height="240dp" 
       android:paddingLeft="0dp" 
       android:paddingRight="15dp" 
       android:paddingTop="15dp" 
       android:paddingBottom="25dp" 
       android:background="@color/black"/> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="@drawable/border_bottom_backgroundless" 
       android:textColor="@color/dark_grey" 
       android:padding="10dp" 
       android:text="All Dramas"/> 

      <!-- A RecyclerView to display list --> 
      <android.support.v7.widget.RecyclerView 
       android:id="@+id/pick_item" 
       android:paddingBottom="20dp" 
       android:scrollbars="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="match_parent" 
       android:minHeight="840dp"/> 


    </LinearLayout> 
</ScrollView> 

Ustawianie wysokości RecyclerView za programowo:

LinearLayout.LayoutParams params = new  
    LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
    ViewGroup.LayoutParams.WRAP_CONTENT); 
// calculate height of RecyclerView based on child count 
params.height=1150; 
// set height of RecyclerView 
recyclerView.setLayoutParams(params); 
+0

Czy przegrywasz z optymalizacją RecycleVew? Innymi słowy, RecycleView nie będzie przetwarzał widoków. –

3

RecyclerView tylko zyskał (jeszcze ograniczone) wsparcie dla zagnieżdżonych przewijania w wersji 22.2.0 - moja pierwsza sugestia byłoby spróbować.

Jedynym widok, który w pełni obsługuje zagnieżdżone przewijanie jest NestedScrollView (widać to od stwierdzenia, że ​​realizuje zarówno NestedScrollingChild i NestedScrollingParent) i dodano wsparcie v4 wersji 22.1.0 (nieco lepsza w 22.2.0). Jeśli masz tylko jeden poziomo RecyclerView jako najwyższy element w pionie RecyclerView, możesz zamiast tego zamienić go na NestedScrollView, który zawiera LinearLayout z Twoim poziomym RecyclerView, a następnie pionowym RecyclerView.

+0

użyłem trzy widok recykler w jednym układzie i w widoku przewijania. Moje elementy recyklingu wyświetlają się w widoku drugiego recyklera, przewijając się. i chciałem pokazać wszystkie przedmioty bez przewijania. ale odniósł sukces dzięki NestedScrollView. dzięki –