Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


RecyclerView dentro de SwipeRefreshLayout dentro de NestedScrollViewLayout no puede desplazarse

Tengo una actividad con la barra de herramientas de colapso y una vista de desplazamiento anidada con un FrameLayout que colocar los fragmentos en ella. Inicialmente, coloco en él un FragmentA con un CardView .

Funciona genial. Cuando hago clic en un botón aunque reemplazo ese FragmentB con otro que contiene un RecyclerView .

Cuando agrego el FragmentB no puedo desplazarse al final de la lista.

Este video muestra el problema: LINK TO VIDEO

Disposición de la actividad del anfitrión:

 <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="340dp" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" android:fitsSystemWindows="true"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_scrollFlags="scroll|exitUntilCollapsed|enterAlwaysCollapsed" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginStart="48dp" app:expandedTitleMarginEnd="64dp"> ......... ...... </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="fill_vertical" android:fillViewport="true" app:layout_behavior="@string/appbar_scrolling_view_behavior" > <!-- the layout which will be the content of the activity (which will be hosted inside the drawer (NOT the list of the drawer)) --> <FrameLayout android:id="@+id/frame_container" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" > </FrameLayout> </android.support.v4.widget.NestedScrollView> 

FragmentB Diseño:

 <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/contentView" android:layout_width="match_parent" android:layout_height="wrap_content" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <android.support.v7.widget.RecyclerView android:id="@+id/rv_users" app:layout_behavior="@string/appbar_scrolling_view_behavior" android:layout_width="match_parent" android:layout_height="wrap_content" /> <include layout="@layout/view_progress" /> <include layout="@layout/view_retry" /> <!--</LinearLayout>--> </android.support.v4.widget.SwipeRefreshLayout> 

  • Cómo obtener la posición en onCreateViewHolder
  • ¿Que es mejor? NotifyDataSetChanged o notifyItemChanged en el bucle?
  • Configuración dinámica de una altura fija para una vista de cuadrícula escalonada
  • YouTubePlayerFragment dentro de ReyclerView
  • RecyclerView Expandir / Contraer elementos
  • Efecto Parallax en cada elemento en una vista de reciclador?
  • ¿Qué es la contraparte de RecyclerView.Adapter de ListView.Adpater.isEnabled ()
  • RecyclerView onBindViewHolder sólo se llama cuando los cambios getItemViewType
  • 4 Solutions collect form web for “RecyclerView dentro de SwipeRefreshLayout dentro de NestedScrollViewLayout no puede desplazarse”

    NestedScrollView RecyclerView dentro de la NestedScrollView .
    Creo que la mejor solución es tener NestedScrollView o RecyclerView pero no ambos, porque RecyclerView ya está implementando NestedScrollingChild .

    Tengo un diseño similar en mi aplicación. Hice lo mismo – poner RecyclerView a FrameLayout y luego dentro de la NestedScrollView. Es parada para funcionar correctamente. Sin NestedScrollView todo funciona bien.

    Creo que esto es scrollevent problema, customview extiende ListView o RecycleView. Este es mi sol

     public class RewriteListView extends ListView { public RewriteListView(Context context) { super(context); } public RewriteListView(Context context, AttributeSet attrs) { super(context, attrs); } public RewriteListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } 

    }

    sea ​​feliz 🙂

    ¡Ya respondido! Dos elementos desplazables (como RecycleView y NestedScrollView en tu pregunta) no pueden funcionar juntos.

    Edite el diseño de su actividad.

     <ParentLayout> ....... <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="340dp" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" android:fitsSystemWindows="true"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_scrollFlags="scroll|exitUntilCollapsed|enterAlwaysCollapsed" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginStart="48dp" app:expandedTitleMarginEnd="64dp"> ......... ...... </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> //THIS FRAGMENT WILL BE REPLACED! <FrameLayout android:id="@+id/frame_container" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" > </FrameLayout> ....... </ParentLayout> 

    Y que por defecto, en la primera ejecución de esta actividad – reemplazó FrameLayout arriba – a tu primer fragmento con NestedScrollView (Necesitas crear un nuevo Fragmento para reemplazarlo) y después de hacer clic reemplazando a Fragmento en tu Pregunta.

    Dos cosas:

    En primer lugar, no tiene que incrustar el contenedor de fragmentos en NestedScrollView si desea un comportamiento de desplazamiento en su actividad.

    Ponga FrameLayout directamente en el diseño del Coordinador con el atributo layout_behavior en él, luego simplemente coloque cualquier fragmento con el desplazamiento View (y no tiene que tener layout_behavior attr).

    Así que en tu ejemplo deberías tener fragmentos:

    FragmentA que tiene disposición con CardView dentro de NestedScrollView FragmentB con RecyclerView dentro de SwipeRefreshLayout

    Otro problema es que se pone más de un niño en SwipeRefreshLayout , y como se indica en la documentación debe tener sólo un hijo directo. fuente

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.