Iniciando uma Activity para um Resultado

Imagine que, além de iniciar uma nova Activity, seu programa queira receber alguma informação processada por essa Activity. Por exemplo, imagine que você tenha uma lista de nomes cadastrados e queira editar algum desses nomes. Imagine que para fazer isso, você vai tocar no nome e uma nova Activity será exibida para editar esse texto. Uma vez concluída essa edição, essas informações devem ser salvas e exibidas pela Activity inicial.

Para fazer isso, precisamos receber da Activity lançada informações sobre os dados que foram manipulados nela. É aí que entra o comando startActivityForResult(). Ao iniciar uma Activity utilizando esse comando, espera-se que a nova Activity, ao finalizar, retorne para a Activity anterior alguma informação que vai ser útil a ela. A Listagem 8 mostra um exemplo de uma Activity inicializando outra a fim de obter um resultado dela.

Listagem 8 – Iniciando uma Activity para um Resultado.

Uma vez iniciada utilizando esse comando, uma Activity deve responder com um resultado, utilizando um resultCode, configurado através do método setResult(), e um Intent, criado durante a execução da Activity. Esses dois valores são os responsáveis por retornar os resultados requeridos pela Activity inicial. Assim que a Activity for finalizada, esses valores serão enviados ao método onActivityResult() da Activity pai. A Listagem 9 demonstra uma possível implementação desse método.

Listagem 9 – Método onActivityResult.

Veja que esse método tem três parâmetros. O primeiro deles, o requestCode, é o parâmetro responsável por dizer a Activity qual foi o código que ela enviou na sua criação. O valor deste parâmetro deve ser o mesmo indicado no segundo parâmetro na Activity pai, na chamada do método startActivityForResult(intent,1) (no caso, o valor 1). Esse parâmetro é necessário, pois é possível iniciar o tratamento do resultado por mais de uma Activity, e ele ajuda a saber qual Activity filha está retornando para esse método. O parâmetro resultCode é utilizado pela Activity filha para sinalizar qual foi o resultado da execução. É através dessa variável que a Activity filha poderá indicar se teve sucesso ou não em realizar o que lhe foi pedido, por exemplo. Por fim, o Intent que é devolvido a esse método é utilizado para transportar dados entre as duas Activities, tornando possível ao pai utilizar dados que foram gerados no filho para se atualizar, ou completar os seus objetivos. Essa transferência de dados entre Activities é outro ponto muito importante na comunicação destas.

Para retornar essas informações em um Intent, quando a Activity for iniciada por um resultado, o procedimento é bem parecido como o visto anteriormente para passar um extra de uma Activity para outra. A única diferença é que o Intent não será pego através do getIntent() na Activity pai e sim será passado como parâmetro para o método onActivityResult().

Com esses conhecimentos sobre como utilizar os Intents para passar valores entre Activities, encerramos nossa segunda aula sobre Activities, que falou sobre a comunicação entre esses componentes. Até a próxima!

Versão 5.3 - Todos os Direitos reservados