Este documento mostra como atualizar seu app quando o usuário solicita uma atualização manual, seja com um gesto de deslizar ou usando a ação de atualização da barra de ações.
Responder ao gesto de atualização
Quando o usuário faz o gesto de deslizar para atualizar, o sistema exibe 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()
. 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
onRefresh()
. Dessa forma, você pode usar o mesmo método
de atualização 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 ele terminar de atualizar os 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 a seguir 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 vai chamar o
método
onOptionsItemSelected()
. O app responde a essa chamada exibindo o indicador de progresso e
atualizando os dados do app.
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. Realize 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 terminar, 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); }