sexta-feira, setembro 28, 2012

Desenvolvendo para Android: Intents

Uma Intent é uma estrutura de dados usada para executar uma ação no Android. Vou comentar aqui sobre o uso de Intents para disparar Activities, porém elas podem ser usadas também para comunicar com outras aplicações e serviços.

O uso mais comum de uma intent é quando queremos disparar uma nova Activity na nossa aplicação. O código típico para isto é algo como:
Intent it = new Intent(this, NovaActivity.class);
startActivity(it);
Grosseiramente podemos dizer que "passamos para uma nova tela", mas na a verdade a situação é bem mais complexa. Para começar, as duas Activities (a anterior e a nova) estarão executando independentemente. As instruções após startActivity(it) serão executadas normalmente e a Activity anterior não será informada quando a nova encerrar.

Uma variação deste código é quando queremos ser informados do encerramento da nova Activity:
Intent it = new Intent(this, NovaActivity.class);
startActivityForResult(it, CODIGO);
O parâmetro CODIGO é um int que pode ser usado para a nova Activity saber quem está chamando ou qual o motivo da chamada. Disparando uma Activity desta forma, quando ela encerra, o método  onActivityResult da Activity anterior é chamado. Este método tem três parâmetros: o código passado em startActivityForResult, um código de retorno e um intent. Estes dois últimos parâmetros podem ser usados pela Activity que terminou para retornar resultados.

A passagem de parâmetros entre as duas Activities é um problema, já que estamos falando de dois objetos independentes. Uma forma simples, eficiente e suja é usar membros estáticos para criar variáveis globais.

A forma correta é passar os dados através das intents. Isto é feito usando o métod putExtra da classe intent, que salva um objeto na intent associando-o a uma chave. Existem versões de putExtra para alguns tipos mais comuns, como int e String. Objetos mais complexos precisam implementar a interface Parcelable. Basicamente você vai serializar os campos do seu objeto em strings. Um exemplo simples pode ser visto na primeira resposta desta pergunta.

Um comentário:

Thiago Rodrigo disse...

vc falou que passa informações de uma activity para a próxima, tem como passar para além da próxima uma outra próxima?? :D