Cómo responder a una solicitud de actualización

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);
}