Pull To Refresh en tu lista, RecyclerView en Android

Android tiene el componente nativo para lograr esto, SwipeRefreshLayout.

Pull To Refresh en tu lista, RecyclerView en Android

Si tienes una lista en tu aplicaci贸n donde se cargan los datos y estos requieran actualizaci贸n cuando el usuario lo requiera, la opci贸n m谩s popular suele ser hacer un Pull to Refresh.

Pull To Refresh gesture

En Android no es nada complicado porque tenemos el componente que esta en la librer铆a de soporte, en palabras m谩s sencillas, disponible para todas tus versiones de Android.

El componente se llama SwipeRefreshLayout y te muestro como implementarlo.

Implementaci贸n

Colocarlo en tu dise帽o XML

Encierra a tu RecyclerView, ListView o incluso un simple View con el tag android.support.v4.widget.SwipeRefreshLayout como se muestra:

<android.support.v4.widget.SwipeRefreshLayout
    android:id="@+id/swipeRefreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</android.support.v4.widget.SwipeRefreshLayout>

Es importante que le pongas un id porque necesitamos utilizarlo en tu activity o fragment.

Referencia en la activity o fragment

Como lo usar谩s en varios sitios, es mejor que este como variable global.

private SwipeRefreshLayout swipeRefreshLayout;

Lo referencias por su id como sabes, como siempre.

swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);

Acci贸n cuando se use el gesto

Luego de damos al oyente para que haga algo cuando pase.

swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
    @Override
    public void onRefresh() {
        // Esto se ejecuta cada vez que se realiza el gesto
        cargarDatos();
    }
});

Luego de que carguen los datos o cuando quieras que desaparezca el progreso simplemente usas:

swipeRefreshLayout.setRefreshing(false);

Para hacer lo contrario, ya sabes true en su lugar.

Desactivar el gesto

Puedes desactivar el gesto cuando quieras con:

swipeRefreshLayout.setEnabled(false);

Y para volverlo a activar simplemente true en su lugar.

Cambiar colores

Puedes cambiar el color del progreso y el color de fondo.

swipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary);
swipeRefreshLayout.setProgressBackgroundColorSchemeResource(R.color.colorAccent);

El primero puede recibir m谩s de un color separado por comas.

驴Quieres un ejemplo?

En el siguiente ejemplo creamos un proceso o tarea de ejemplo que tarda 3 segundos para que puedas notar el gesto y la animaci贸n.

Eso es todo. Ahora que sabes que existe el componente y sabes como usarlo, col贸calo en tus proyectos de forma adecuada.