Responder a um pedido de atualização

Este documento mostra como atualizar seu app quando o usuário solicita uma atualização manual, seja o acionamento com um gesto de deslizar ou usando a ação de atualização da barra de ações.

Responder ao gesto de atualizar

Quando o usuário faz o gesto de deslizar para atualizar, o sistema mostra o indicador de progresso e chama o método de callback do app. Seu método de callback é responsável por atualizar os dados do app.

Para responder ao gesto de atualização no app, implemente a interface SwipeRefreshLayout.OnRefreshListener e o método onRefresh() dela. O método onRefresh() é invocado quando o usuário realiza um gesto de deslizar.

Coloque o código da operação de atualização real em um método separado, de preferência em um ViewModel, e chame esse método de atualização na implementação de onRefresh(). Dessa forma, é possível usar o mesmo método para realizar a atualização quando o usuário acionar uma atualização na barra de ações.

No método de atualização, chame setRefreshing(false) quando terminar a atualização dos dados. A chamada desse método instrui o SwipeRefreshLayout a remover o indicador de progresso e atualizar o conteúdo da visualização.

Por exemplo, o código abaixo implementa onRefresh() e invoca o método myUpdateOperation() para atualizar os dados mostrados por um 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();
  }
);

Responder à ação de atualização

Se o usuário solicitar uma atualização usando a barra de ações, o sistema chamará o método onOptionsItemSelected(). Seu app responde a essa chamada mostrando o indicador de progresso e atualizando os dados.

Para responder à ação de atualização, modifique onOptionsItemSelected(). No método de substituição, acione o indicador de progresso SwipeRefreshLayout chamando setRefreshing() com o valor true e execute a operação de atualização. Execute a atualização real em um método separado para que o mesmo método possa ser chamado se o usuário acionar a atualização com um gesto de deslizar ou usar a barra de ações. Quando a atualização for concluída, chame setRefreshing(false) para remover o indicador de progresso.

O código a seguir mostra como responder à ação da solicitação:

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