11

Sono di fronte a un importante problema di scorrimento con ViewPager all'interno di CoordinatorLayout.Scorrimento brusco con NestedScrollView nel frammento ViewPager all'interno di un Android di Coordinatorout

La scena attuale:

  1. app:appbarScrollingViewBehaviour è impostato su ViewPager.
  2. Il frammento ViewPager ha NestedScrollView come elemento principale.
  3. Il layout del frammento contiene Horizontal RecyclerView.
  4. Quando si scorre verso l'alto toccando oltre RecyclerView, la barra dell'app non scorre, ma si verifica solo lo scorrimento annidato.
  5. Quando si scorre toccando il resto della vista, gli scorrevoli CoordinatorLayout. 6) Anche lo scorrimento nidificato si interrompe a metà e interrompe il contenuto.

Quello che ho provato già:

  1. Mettere ViewPager all'interno NestedScrollView e impostare l'attributo app:appbarScrollingViewBehaviour-NestedScrollView. Questo elimina completamente il contenuto del frammento come RecyclerView non può decidere la sua altezza.
  2. L'impostazione setAutoMeasureEnabled(true) su RecyclerView, non è ancora in grado di correggere l'altezza.
  3. E molti altri approcci.

    Si prega di aiutare con questo problema. Il comportamento corrente può essere visualizzato in caricato .gif. Sto anche postando il mio codice per il layout delle attività e il layout dei frammenti e il layout delle righe RecyclerView.

Grazie

activity.xml:

<android.support.design.widget.CoordinatorLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:Customs="http://schemas.android.com/apk/res-auto" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/main_content" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/new_color_primary_skim"> 

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

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/collapsingLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     android:elevation="0dp" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed" 
     android:minHeight="?attr/actionBarSize"> 


     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:fitsSystemWindows="true" 
      app:layout_scrollFlags="scroll|enterAlways" 
      android:layout_height="?attr/actionBarSize"> 

      <FrameLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

       <ImageView 
        android:layout_width="30dp" 
        android:layout_height="30dp" 
        android:layout_gravity="center_vertical" 
        android:src="@drawable/ic_arrow_back" /> 



    <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView 
        android:layout_width="wrap_content" 
        android:layout_height="match_parent" 
        android:layout_gravity="center_horizontal" 
        android:gravity="center_vertical" 
        android:text="Workout" 
        android:textColor="#FFFFFF" 
        android:textSize="19sp" 
        android:textStyle="bold" 
        Customs:font="LatoRegular.ttf" /> 
      </FrameLayout> 

     </android.support.v7.widget.Toolbar> 


      <com.github.mikephil.charting.charts.LineChart 
       android:id="@+id/workout_insights_graph" 
       android:layout_width="match_parent" 
       android:layout_height="150dp" 
       android:layout_below="@+id/toolbar" 
       app:layout_scrollFlags="scroll|snap" 
       android:layout_marginTop="?attr/actionBarSize" 
       app:layout_collapseMode="parallax" 
       android:animateLayoutChanges="true" /> 

      <com.fitsquare.app.fitsquare.Entity.Customs.SlidingTabLayout 
       android:id="@+id/tabs" 
       android:layout_width="match_parent" 
       android:layout_below="@+id/diet_insights_graph" 
       android:layout_height="50dp" 
       android:layout_gravity="bottom" 
       android:background="@color/transparent" /> 
     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="right|top" 
      android:layout_marginRight="-50dp" 
      android:layout_marginTop="-50dp" 
      android:src="@drawable/workout_translucent" /> 

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




    <android.support.v4.view.ViewPager 
     android:id="@+id/view_pager" 
     android:layout_width="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     android:layout_height="wrap_content"> 
     </android.support.v4.view.ViewPager> 


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

pager_fragment.xml:

<?xml version="1.0" encoding="utf-8"?> 


<android.support.v4.widget.NestedScrollView  
xmlns:android="http://schemas.android.com/apk/res/android" 

xmlns:Customs="http://schemas.android.com/apk/res-auto" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:card_view="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:paddingLeft="7dp" 
     android:paddingRight="7dp" 
     android:paddingTop="10dp"> 


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


      <LinearLayout 
       android:layout_width="100dp" 
       android:layout_height="4dp" 
       android:layout_marginTop="10dp" 
       android:alpha="0.5" 
       android:background="@drawable/round_gray_dark" 
       android:orientation="horizontal"></LinearLayout> 


      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="5dp" 
       android:gravity="center_vertical" 
       android:orientation="horizontal"> 


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


        <LinearLayout 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_marginTop="10dp" 
         android:orientation="horizontal"> 


    <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:text="Target Calories to burn : " 
          android:textColor="@color/white" 
          android:textSize="14sp" 
          Customs:font="LatoRegular.ttf" /> 



<com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:text="2300" 
          android:textColor="@color/white" 
          android:textSize="14sp" 
          android:textStyle="bold" 
          Customs:font="LatoRegular.ttf" /> 
        </LinearLayout> 

        <LinearLayout 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_marginTop="10dp" 
         android:orientation="horizontal"> 



<com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:text="Burned calories : " 
          android:textColor="@color/white" 
          android:textSize="14sp" 
          Customs:font="LatoRegular.ttf" /> 


    <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:text="2300" 
          android:textColor="@color/white" 
          android:textSize="14sp" 
          android:textStyle="bold" 
          Customs:font="LatoRegular.ttf" /> 
        </LinearLayout> 

        <LinearLayout 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_marginTop="10dp" 
         android:orientation="horizontal"> 


    <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:text="Total workout time : " 
          android:textColor="@color/white" 
          android:textSize="14sp" 
          Customs:font="LatoRegular.ttf" /> 



    <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:text="20 mins" 
          android:textColor="@color/white" 
          android:textSize="14sp" 
          android:textStyle="bold" 
          Customs:font="LatoRegular.ttf" /> 
        </LinearLayout> 


       </LinearLayout> 

      </LinearLayout> 

      <LinearLayout 
       android:layout_width="100dp" 
       android:layout_height="4dp" 
       android:layout_marginTop="10dp" 
       android:alpha="0.5" 
       android:background="@drawable/round_gray_dark" 
       android:orientation="horizontal"></LinearLayout> 
     </LinearLayout> 


     <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView 
      android:id="@+id/textView27" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="20dp" 
      android:text="Today" 
      android:textColor="@color/white" 
      android:textSize="21sp" 
      Customs:font="LatoRegular.ttf" /> 

     <LinearLayout 
      android:layout_width="100dp" 
      android:layout_height="4dp" 
      android:layout_marginTop="5dp" 
      android:alpha="0.5" 
      android:background="@drawable/round_gray_dark" 
      android:orientation="horizontal"></LinearLayout> 


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

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


      <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView 
       android:id="@+id/textView31" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Tomorrow" 
       android:textColor="@color/white" 
       android:textSize="21sp" 
       Customs:font="LatoRegular.ttf" /> 

      <LinearLayout 
       android:layout_width="100dp" 
       android:layout_height="4dp" 
       android:layout_marginTop="5dp" 
       android:alpha="0.5" 
       android:background="@drawable/round_gray_dark" 
       android:orientation="horizontal"></LinearLayout> 


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


       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="10dp" 
        android:orientation="horizontal"> 


     <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="Target Calories to burn : " 
         android:textColor="@color/white" 
         android:textSize="14sp" 
         Customs:font="LatoRegular.ttf" /> 


     <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="2300" 
         android:textColor="@color/white" 
         android:textSize="14sp" 
         android:textStyle="bold" 
         Customs:font="LatoRegular.ttf" /> 
       </LinearLayout> 


       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="10dp" 
        android:orientation="horizontal"> 


     <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="Total workout time : " 
         android:textColor="@color/white" 
         android:textSize="14sp" 
         Customs:font="LatoRegular.ttf" /> 


     <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="20 mins" 
         android:textColor="@color/white" 
         android:textSize="14sp" 
         android:textStyle="bold" 
         Customs:font="LatoRegular.ttf" /> 
       </LinearLayout> 
      </LinearLayout> 

     </LinearLayout> 
    </LinearLayout> 

    <!-- <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:clickable="true" 
     android:src="@color/transparent" />--> 
</FrameLayout> 

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

Quindi puoi spiegare il problema in dettaglio? Cosa vuoi ottenere? – rom4ek

risposta

9

ho trovato la soluzione e risolto il problema io stesso. Dato che RecyclerView orizzontale era figlio di Scroll View nidificato, non trasferiva gli eventi di scorrimento a CoordinatorLayout. Ho appena risolto disabilitando lo scorrimento annidato usando questa linea di codice.

recyclerView.setNestedScrollingEnabled(false);

Problemi correlati