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"