SwipeRefreshLayout com NestedScrollView – Android
Introdução:
No Android, temos SwipeRefreshLayout, que costumamos usar em nossos layouts para atualizar o conteúdo de uma visualização com o recurso de gesto vertical, sempre que precisamos. O SwipeRefreshLayout
pode suportar apenas um filho direto, então sempre que precisarmos adicionar em nosso layout, sempre tentamos adicionar antes de nosso RecyclerView como este trecho de código abaixo:
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <andridx.Swiperfreshlayout.widget.Swiperfreshlayout android:id="@+id/SwipeRefresh" android:layout_width="match_parent" android;layout_height="wrap_content"> <andridx.recyclerview.widget.RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="match_parent"/> </andridx.Swiperfreshlayout.widget.Swiperfreshlayout> </LinearLayout>
Recentemente, tenho trabalhado em um aplicativo onde tenho um RecyclerView
com CoolapingToolbar
e NestedScrollView
, e preciso adicionar um SwipeRefreshLayout
, então apenas implementei a forma como ele parecia acima simplesmente coloque o SwipRefreshLayout
acima do RecyclerView
.
Depois disso, eu apenas executei o aplicativo e adivinhe, nada aconteceu e os dados não estavam aparecendo na lista, então eu descobri o que está errado na implementação.
Como resolver:
A solução é muito simples, precisamos adicionar um SwipRefreshLayout acima de NestedScrollView e, portanto, você deve mover o app:layout_behavior="@string/appbar_scrolling_view_behavior"
de NestedScrollView
para SwipeRefreshLayout
.
Isso é apenas executa seu aplicativo e vê os resultados.
Vamos ver com o arquivo XML.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match parent" android:layout_heigth:"match_parent" android:background="@color/activity_background" android:orientation="vertical"> <androidx.swiperefreshlayout.widget.SwipeRefreshLayout android:id="@+id/swipe refresh" android:layout_width="match_parent" android:layout_heigth="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <androidx.core.widget.NestedScrollView android:layout_width="match parent" android:layout_heigth="match parent" android:fillViewport="true" android:scrollbars="none"> <LinearLayout android:layout_width="match_parent" android:layout_heigth="wrap_content" android:facusableInTouchMove="true" android:orientation="vertical"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout_heigth="wrap_content" android:descendantFocusability="blocksDescendants" android:filsSystemWindows="true" android:focusableInTouchMode="true" /> </LinearLayout> </androidx.core.widget.NestedScrollView> </LinearLayout>
Conclusão:
Este artigo descreveu como implementar o SwipeRefreshLayoyut com NestedScrollView, como a implementação é diferente da tradicional.