En este documento, se muestra cómo actualizar tu app cuando el usuario solicita un manual actualizar, ya sea que la activen con un gesto de deslizamiento o con la barra de acciones actualizar acción.
Cómo responder al gesto de actualizar
Cuando el usuario hace el gesto de deslizar para actualizar, el sistema muestra un indicador de progreso y llama al método de devolución de llamada de tu app. Tu método de devolución de llamada es de actualizar los datos de la app.
Para responder al gesto de actualizar en tu app, implementa el
SwipeRefreshLayout.OnRefreshListener
y su
onRefresh()
. El método onRefresh()
se invoca cuando el usuario realiza una
gesto de deslizamiento.
Coloca el código para la operación de actualización real en un método separado (preferiblemente, de otro método).
en un ViewModel
y llama a ese método de actualización desde tu
Implementación de onRefresh()
. De esa manera, puedes usar la misma actualización
método para realizar la actualización cuando el usuario activa una actualización desde la acción
.
En tu método de actualización, llama
setRefreshing(false)
cuando termina de actualizar los datos. La llamada a este método le indica a la
SwipeRefreshLayout
para quitar el indicador de progreso y actualizar el contenido de la vista.
Por ejemplo, el siguiente código implementa onRefresh()
y
Invoca el método myUpdateOperation()
para actualizar los datos que se muestran.
por un
ListView
:
Kotlin
// Sets up a SwipeRefreshLayout.OnRefreshListener that invokes when // the user performs a swipe-to-refresh gesture. mySwipeRefreshLayout.setOnRefreshListener { Log.i(LOG_TAG, "onRefresh called from SwipeRefreshLayout") // This method performs the actual data-refresh operation and calls // setRefreshing(false) when it finishes. myUpdateOperation() }
Java
// Sets up a SwipeRefreshLayout.OnRefreshListener that is invoked when // the user performs a swipe-to-refresh gesture. mySwipeRefreshLayout.setOnRefreshListener(() -> { Log.i(LOG_TAG, "onRefresh called from SwipeRefreshLayout"); // This method performs the actual data-refresh operation and calls // setRefreshing(false) when it finishes. myUpdateOperation(); } );
Cómo responder a la acción de actualizar
Si el usuario solicita una actualización mediante la barra de acciones, el sistema llama al
onOptionsItemSelected()
. Tu app responde a esta llamada mostrando el indicador de progreso y
actualizando los datos de la app.
Para responder a la acción de actualización, anula
onOptionsItemSelected()
En tu método de anulación, activa el
Indicador de progreso de SwipeRefreshLayout
llamando
setRefreshing()
con el valor true
y, luego, realiza la
una operación de actualización. Realiza la actualización en un método independiente, de modo que
método de llamada, ya sea que el usuario active la actualización deslizando el dedo o use
la barra de acciones. Cuando finalice la actualización, llama a setRefreshing(false)
para quitar el indicador de progreso de la actualización.
En el siguiente código, se muestra cómo responder a la acción de solicitud:
Kotlin
// Listen for option item selections to receive a notification when the user // requests a refresh by selecting the refresh action bar item. override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { // Check whether the user triggers a refresh: R.id.menu_refresh -> { Log.i(LOG_TAG, "Refresh menu item selected") // Signal SwipeRefreshLayout to start the progress indicator. mySwipeRefreshLayout.isRefreshing = true // Start the refresh background task. This method calls // setRefreshing(false) when it finishes. myUpdateOperation() return true } } // User doesn't trigger a refresh. Let the superclass handle this action. return super.onOptionsItemSelected(item) }
Java
// Listen for option item selections to receive a notification when the user // requests a refresh by selecting the refresh action bar item. @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // Check whether the user triggers a refresh: case R.id.menu_refresh: Log.i(LOG_TAG, "Refresh menu item selected"); // Signal SwipeRefreshLayout to start the progress indicator. mySwipeRefreshLayout.setRefreshing(true); // Start the refresh background task. This method calls // setRefreshing(false) when it finishes. myUpdateOperation(); return true; } // User doesn't trigger a refresh. Let the superclass handle this action. return super.onOptionsItemSelected(item); }