studio recyclerview hacer como android swiperefreshlayout

android - recyclerview - SwipeRefreshLayout con scrollView y diseño arriba



swiperefreshlayout kotlin (4)

Tengo el siguiente diseño

<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > //some views here </LinearLayout> <ScrollView android:layout_width="match_parent" android:layout_height="wrap_content" > <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:stretchColumns="*" > </TableLayout> </LinearLayout> </android.support.v4.widget.SwipeRefreshLayout>

El problema es que cuando desplazo la tabla, no puedo desplazarme de nuevo porque se está activando el deslizamiento de la pantalla. ¿Cómo puedo activar el swiperefresh solo cuando la primera vista de la tabla es visible?


Descubrí que si reemplaza su ScrollView con un android.support.v4.widget.NestedScrollView el comportamiento de desplazamiento funcionará como espera.


Haga su propia implementación de SwipeRefreshLayout y anule canChildScrollUp de esta manera:

@Override public boolean canChildScrollUp() { if (scrollView != null) return scrollView.canScrollVertically(-1); return false; }

simplemente reemplace con cualquier subclase de ScrollView.


Si tienes un diseño como este:

<SwipeRefreshLayout> <android.support.v4.widget.NestedScrollView android:id="@+id/your_scroll_view_id"> <LinearLayout> ... </LinearLayout> </android.support.v4.widget.NestedScrollView> </SwipeRefreshLayout>

Necesitas crear tu propia clase y anular la función de esta manera:

class SwipeRefreshLayoutCustom extends SwipeRefreshLayout { public SwipeRefreshLayoutCustom(Context context, AttributeSet attributes) { super(context, attributes) } @override boolean canChildScrollUp() { return your_scroll_view_id.scrollY != 0 } }


Utilice NestedScrollView con:

app:layout_behavior="@string/appbar_scrolling_view_behavior"