Para mi aplicación la estoy usando un RecyclerView dentro de un ScrollView donde el RecyclerView tiene una altura sobre la base de su contenido mediante esta biblioteca. El desplazamiento es de trabajo, pero no está funcionando sin problemas cuando se me pase por la RecyclerView. Cuando me pase por el ScrollView sí que se desplaza sin problemas.

El código que estoy utilizando para definir el RecyclerView:

LinearLayoutManager friendsLayoutManager = new LinearLayoutManager(getActivity().getApplicationContext(), android.support.v7.widget.LinearLayoutManager.VERTICAL, false);
mFriendsListView.setLayoutManager(friendsLayoutManager);
mFriendsListView.addItemDecoration(new DividerItemDecoration(getActivity().getApplicationContext(), null));

La RecyclerView en el ScrollView:

<android.support.v7.widget.RecyclerView
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    android:id="@+id/friendsList"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
  • esta solución funciona para mí: stackoverflow.com/a/32390370/7308789 gracias
  • lo que exactamente no funciona en su caso, elaborar más sobre eso. También, parece que no aportó soluciones trabajado en su caso, ¿es así?
  • Uso androidx.constraintlayout.widget.ConstraintLayout que va a resolver su problema sin ningún tipo de complejos implementaciones

11 Comentarios

  1. 354

    Trate de hacer:

    RecyclerView v = (RecyclerView) findViewById(...);
    v.setNestedScrollingEnabled(false);

    Como una alternativa, usted puede modificar su diseño mediante el apoyo de la biblioteca de diseño. Supongo que su diseño actual es algo así como:

    <ScrollView >
       <LinearLayout >
    
           <View > <!-- upper content -->
           <RecyclerView > <!-- with custom layoutmanager -->
    
       </LinearLayout >
    </ScrollView >

    Usted puede modificar para:

    <CoordinatorLayout >
    
        <AppBarLayout >
            <CollapsingToolbarLayout >
                 <!-- with your content, and layout_scrollFlags="scroll" -->
            </CollapsingToolbarLayout >
        </AppBarLayout >
    
        <RecyclerView > <!-- with standard layoutManager -->
    
    </CoordinatorLayout >

    Sin embargo, este es un largo camino a tomar, y si usted está de acuerdo con la costumbre lineal administrador de diseño, a continuación, sólo tiene que desactivar anidada de desplazamiento en el reciclador de vista.

    Editar (4/3/2016)

    La v 23.2 liberación de las bibliotecas de soporte incluye ahora una fábrica de «envoltura de contenido» en todos los predeterminada LayoutManagers. Yo no se prueba, sino que debe, probablemente, la prefieren a la biblioteca que estaba utilizando.

    <ScrollView >
       <LinearLayout >
    
           <View > <!-- upper content -->
           <RecyclerView > <!-- with wrap_content -->
    
       </LinearLayout >
    </ScrollView >
    • Para agregar a esta respuesta: setNestedScrollingEnabled(false) sólo funcionó cuando me cambié a cabo la ScrollView para un NestedScrollView lugar.
    • Para mí, setNestedScrollingEnabled(false) me dio la espalda desplazamiento suave con mi RecyclerView dentro de un ScrollView – Gracias! Pero todavía no entiendo por qué los que trabaja…? ¿Qué quiere decir realmente conjunto anidado de desplazamiento falso?
    • Tenga en cuenta que android:nestedScrollingEnabled="false" sólo funciona para la API 21+ pero v.setNestedScrollingEnabled(false) está bien para <21.
    • Esto parece funcionar bien y me salvó de horas de trabajo. Gracias. ¿Hay alguna desventaja para el uso de esta solución? Porque hay un montón de comentarios por ahí diciendo que esto no es una buena solución, que no debe de poner de desplazamiento de puntos de vista dentro de uno a otro.
    • estos comentarios son probablemente muy antiguo. Desde anidada desplazamiento fue introducido, es aceptar a nido de desplazamiento de puntos de vista.
    • Para referencia en el futuro, si alguien está experimentando RecyclerView wrap_content número en el interior de ScrollView que sólo que sucede en el malvavisco/turrón (API 23, 24) de los dispositivos, compruebe mi solución en stackoverflow.com/a/38995399/132121
    • otro problema aparece, vista anidada contenido será desplazado por recyclerview cada vez
    • Una desventaja de esta solución que estoy experimentando ahora mismo, es que la RecyclerView no recibirá los eventos en que es onScrollListener. Que necesito porque quiero obtener más datos cuando tengo sólo una cierta cantidad de elementos en el recycler
    • si el reciclador es wrap_content, significa que no pueda desplazarse. Tal vez el uso de un elemento especial, como una barra de progreso, y obtener los datos onBindViewHolder de ese tema en particular.
    • setNestedScrollingEnabled(false) acaba de hacer el recycleview rápido..aún no sé lo que sucederá..jaja
    • v. setNestedScrollingEnabled(false); Esta línea ha ayudado mucho..Gracias
    • Esta es una buena explicación y me ayuda mucho.
    • setNestedScrollingEnabled(falso) Resuelto mi problema de desplazamiento
    • Esta solución resuelve el efecto de scroll, he continuación problema de este. Quiero tener la opción de arrastrar por el RecyclerView. Sólo puedo colocar el elemento en los elementos visibles en la pantalla. No puede caer en los elementos que no son visibles en la lista. Puedo lograrlo si puedo quitar NestedScrollView. Traté de requestDisallowInterceptTouchEvent en onTouchEvent pero no hubo suerte. Alguien tuvo el mismo problema?
    • Acaba de agregar nestedScrollingEnabled=»false» en recyclerview Que trabajó para mí. Gracias por ur apoyo.
    • lo resolvió.

  2. 74

    Sólo tuve que usar este:

    mMyRecyclerView.setNestedScrollingEnabled(false);

    en mi onCreateView() método.

    Muchas gracias!

  3. 25

    Puede utilizar de esta manera :

    Añadir esta línea a su recyclerView archivo xml :

    android:nestedScrollingEnabled="false"

    O en código java :

    RecyclerView.setNestedScrollingEnabled(false);

    Espero que esto ayudó .

    • requiere Api 21+
  4. 11

    Puedes probar con los medios con XML y programación. Pero el problema que puede enfrentar es (por debajo de la API 21) por hacerlo con XML no funcionará . Así que es mejor establecer mediante programación en su Actividad o Fragmento.

    Código XML:

    <android.support.v7.widget.RecyclerView
          android:id="@+id/recycleView"
          android:layout_width="match_parent"
          android:visibility="gone"
          android:nestedScrollingEnabled="false"
          android:layout_height="wrap_content"
          android:layout_below="@+id/linearLayoutBottomText" /> 

    Programación:

     recycleView = (RecyclerView) findViewById(R.id.recycleView);
     recycleView.setNestedScrollingEnabled(false);
  5. 5

    Tuve problemas similares (traté de crear un entramado RecyclerViews algo como Google PlayStore de diseño). La mejor manera de lidiar con esto es crear subclases de el niño RecyclerViews y la invalidación de la ‘onInterceptTouchEvent’ y ‘onTouchEvent’ métodos. De esta manera usted consigue el control total de cómo los eventos se comportan y, finalmente, el desplazamiento.

  6. 3

    Utilizando Anidada Desplácese a la Vista, en lugar de Desplazarse Ver resuelto mi problema

    <LinearLayout> <!--Main Layout -->
       <android.support.v4.widget.NestedScrollView>
         <LinearLayout > <!--Nested Scoll View enclosing Layout -->`
    
           <View > <!-- upper content --> 
           <RecyclerView >
    
    
         </LinearLayout > 
       </android.support.v4.widget.NestedScrollView>
    </LinearLayout>
  7. 0

    Código XML:

    <android.support.v4.widget.NestedScrollView
                android:layout_width="match_parent"
                android:layout_height="match_parent">
    
                <android.support.v7.widget.RecyclerView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:clipToPadding="false" />
    
            </android.support.v4.widget.NestedScrollView>

    en código java :

      recycleView = (RecyclerView) findViewById(R.id.recycleView);
         recycleView.setNestedScrollingEnabled(false);
  8. 0

    Si usted está usando VideoView o de peso pesado de widgets en su childviews mantener su RecyclerView con la altura wrap_content
    dentro de un NestedScrollView con la altura match_parent
    Entonces desplazamiento de trabajo suave como perfectamente como usted lo desea.

    FYI,

    Gracias Micro esto fue a partir de su sugerencia!

    karthik

  9. 0

    Resumen de todas las respuestas (Ventajas & Desventajas)

    Para un solo recyclerview

    puede utilizar dentro de Coordinador de diseño.

    Ventaja – no va a cargar toda la recyclerview elementos. Tan suave la carga.

    Desventaja – no se puede cargar dos recyclerview dentro de Coordinador de diseño – se produce el desplazamiento de los problemas

    de referencia – https://stackoverflow.com/a/33143512/3879847

    Para múltiples recylerview con un mínimo de filas

    puede cargar en el interior de NestedScrollView

    Ventaja – se va a desplazarse suavemente

    Desventaja – la carga de todas las filas de recyclerview por lo que su actividad abierta con retraso

    de referencia – https://stackoverflow.com/a/33143512/3879847

    Para múltiples recylerview con filas grandes(más de 100)

    Debe ir con recyclerview.

    Ventaja – Desplazarse suavemente, carga sin problemas

    Desventaja – Que necesita para escribir más código y la lógica

    De carga de cada recylerview dentro de main recyclerview con la ayuda de la multi-viewholders

    ex:

    MainRecyclerview

    De referencia para multi-viewHolder – https://stackoverflow.com/a/26245463/3879847

Dejar respuesta

Please enter your comment!
Please enter your name here