Intents – Passagem de parâmetros entre telas

As Intents possibilitam que informações possam ser transmitidas de uma tela para outra, conforme o usuário navega pela aplicação. Este é um item bem relevante no desenvolvimento mobile, pois muitas vezes precisamos de uma informação pequena, como a posição de uma lista que o usuário selecionou algum item, para ser utilizada na tela seguinte. E muitas vezes esta informação, por ser pequena, não vale a pena ser salva num banco de dados ou Shared Preferences, pois pode ser descartada na tela seguinte. Pensando nisto, o Android criou as Intents, que possuem não servem somente para passagem de parâmetros, o qual é nosso objetivo aqui.

Vamos imaginar uma lista de produtos de papelaria, onde, ao selecionar um da lista o usuário é direcionado para outra tela, que conterá detalhes do produto, como preço, quantidade de itens em estoque, descontos, etc. Veja a imagem abaixo:

Intents

O Android define as Intens como “uma descrição abstrata de uma operação que pode ser realizada”. O nome é sugestivo: determinam uma intenção de determinada ação. Estas ações podem ser tanto dentro da própria aplicação como chamar outra tela até mesmo compartilhar algo com uma aplicação que possa atender a solicitação. Este tutorial tem o foco de mostrar o uso das intents para passagem de parâmetros entre telas.

Iniciando outra tela

Como foi dito, a intent é uma intenção, e uma das intenções possíveis é inicializar uma outra tela. Para isto é preciso criar uma instância de intent passando o contexto atual e a nova activity desejada.

Com esta instância criada será possível passar os parâmetros desejados, que podem ser de diversos tipos: int, String, float entre outros, a Figura abaixo mostra alguns dos possíveis tipos de valores.

Screen Shot 2016-01-26 at 10.08.11 PM

Depois passamos os parâmetros desejados e iniciamos uma nova activity passando esta “intent” que foi criada.

Mas, mesmo fazendo isto ainda não está completo, perceba, armazenamos dentro de uma intent os valores que estamos passando, mas ainda uma outra activity não foi iniciada. Então usamos o método startActivity(intent) para iniciar nossa nova tela.

Se, a esta altura do campeonato tentar rodar o projeto verá que ocorrerá o seguinte erro, como mostrado na Figura abaixo:

Screen Shot 2016-01-23 at 4.57.08 PM

Este erro ocorre porque ainda falta mais um pequeno passo. Toda tela que uma aplicação utiliza deve ser declarada no Manifest File. Isto porque o Android detecta por este arquivo quais são as telas existentes na aplicação. Se você perceber, toda vez que cria um projeto o Android Studio se encarrega de deixar declarado para a primeira tela o seguinte código:

Vamos analisar cada parte. A primeira tag é uma activity, assim ele sabe que estamos falando de uma Activity. A segunda tag, que está dentro da tag activity é o intent-filter, que pode ser entendido como características que são anexadas à intent, e servirão para o elemento que for tratar esta intent. Difícil de entender!? Calma, vamos lá, o Android possui um jeito peculiar de raciocinar, que é muito útil em muitos aspectos, incluindo as intents.

As intents são “jogadas” para o sistema operacional, e quem puder “responder” a elas poderá ser solicitado. Assim você pode compartilhar (share) um conteúdo com contatos do WhatsApp, Hangouts, Gmail, enfim, várias aplicações podem tratar esta sua solicitação.

Portanto, os filtros servem como características que são adicionadas às intents. No caso, quando uma activity é a primeira de uma aplicação é preciso explicitar que ela é a principal. Você deve ter notado que o intent-filter não trabalha sozinho, existem 3 tipos de informações que podem ser adicionadas a ele: <action>, <category>, <data>, além dos extras e flags (que são setados em tempo de execução via código).

A action é uma string que especifica uma ação genérica como exibir, selecionar ou enviar. A category é uma string que especifica como o componente que receber essa intent deverá tratá-la. E data é uma string que está mais associada a action, ela especifica o tipo de dado, assim se a action for ACTION_EDIT então esta tag, data, deverá conter o dado a ser editado, no formato URI.

Pode haver em uma aplicação intents customizadas, mas o mais comum de ocorrer, é sua aplicação querer responder a uma intent gerada pelo sistema, como escrever, ler, entre outras possíveis ações.

Para ter mais uma activity na aplicação não é necessário declarar ação ou categoria para esta intent, ou seja, ela não precisa de intent-filters neste caso. Veja o código:

Passando objetos do tipo Parcelable

Imagine um objeto “Usuário” que possua diversos atributos, como nome, idade, endereço, e muitos outros. Fica um pouco complicado ficar passando atributo por atributo. O interessante é que tenhamos uma forma de passar um objeto inteiro. Existe uma forma de fazer isto no Android: o Parcelable e Serializable. A diferença entre eles é mais uma questão de processamento, o Serializable que vem do java é mais lento, já o parcelable é uma implementação do Android e é mais performático. A primeira mudança no código é mexer no modelo, neste caso já possuo a classe modelo, e só será modificado o código para implementar um parcelable.

Depois disso devemos mudar a intent que estamos enviando para a outra tela, de detalhe de item.

Feito! Agora precisa-se tratar o lado que vai receber este dados, pois até agora foi visto como enviar, mas não como receber. Na activity da tela seguinte, que está recebendo os valores vamos capturar estes dados que foram enviados.

E então basta setar os valores desejados que vieram da tela anterior, veja abaixo:

Conclusão

As intents são muito úteis no desenvolvimento mobile, estão presentes em diversas aplicações consideradas sucesso em Android. Facilitam consideravelmente a troca de informações entre telas de forma rápida e fácil.

O exemplo usado neste post encontra-se no github no seguinte link: https://github.com/paulacr/Intents

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s