Esta lição mostra como atualizar seu app quando o usuário solicita uma atualização manual, seja com o gesto de deslizar ou usando a barra de ações.
Responder ao gesto de atualização
Quando o usuário faz um gesto de deslizar, o sistema exibe o indicador de progresso e chama o método de callback do app. O método de callback é responsável por atualizar os dados do app.
Para responder ao gesto de atualização no seu 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 e chame esse método de atualização na implementação onRefresh()
. Dessa forma, você poderá usar o mesmo método para realizar a atualização quando o usuário acioná-la na barra de ações.
Seu método de atualização chamará setRefreshing(false)
ao concluir 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 a seguir implementa onRefresh()
e invoca o método myUpdateOperation()
para atualizar os dados exibidos pelo ListView
:
Kotlin
/* * 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. // The method calls setRefreshing(false) when it's finished. myUpdateOperation() }
Java
/* * Sets up a SwipeRefreshLayout.OnRefreshListener that is invoked when the user * performs a swipe-to-refresh gesture. */ mySwipeRefreshLayout.setOnRefreshListener( new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { Log.i(LOG_TAG, "onRefresh called from SwipeRefreshLayout"); // This method performs the actual data-refresh operation. // The method calls setRefreshing(false) when it's finished. myUpdateOperation(); } } );
Responder à ação de atualizar
Se o usuário solicitar uma atualização usando a barra de ações, o sistema chamará o método onOptionsItemSelected()
. O app responderá a essa chamada exibindo o indicador de progresso e atualizando os dados do app.
Para responder à ação de atualização, modifique onOptionsItemSelected()
. No seu método de modificação, acione o indicador de progresso SwipeRefreshLayout
chamando setRefreshing()
com o valor true
e execute a operação de atualização. Mais uma vez, 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 usando a barra de ações. Quando a atualização terminar, chame setRefreshing(false)
para remover o indicador de progresso da atualização.
O código a seguir mostra como responder à ação da solicitação:
Kotlin
/* * Listen for option item selections so that we 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 if user triggered 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's finished. myUpdateOperation() return true } } // User didn't trigger a refresh, let the superclass handle this action return super.onOptionsItemSelected(item) }
Java
/* * Listen for option item selections so that we 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 if user triggered 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's finished. myUpdateOperation(); return true; } // User didn't trigger a refresh, let the superclass handle this action return super.onOptionsItemSelected(item); }
Observação: quando o usuário aciona uma atualização com uma ação de deslizar, conforme descrito em Responder ao gesto de atualização, você não precisa chamar setRefreshing()
.
O widget SwipeRefreshLayout
exibirá o indicador de progresso e o removerá quando a atualização terminar. No entanto, se a atualização for acionada por qualquer outro meio que não seja um gesto de deslizar, você precisará ativar explicitamente o indicador de progresso com setRefreshing()
.
O método que atualiza as chamadas de dados setRefreshing(false)
para sinalizar que a atualização foi concluída.