* Este post foi redigido pela equipe C.E.S.A.R. Sorocaba
Ao desenvolver uma aplicação para Android, devemos estar familiarizados com alguns conceitos básicos relacionados à sua estrutura. Entre eles, podemos citar dois componentes essenciais para toda aplicação: as activities e os intents.
Uma Activity é uma classe Java que herda da classe Activity do pacote Android. Ela define a tela que irá interagir com um usuário de Android. Para desenvolver qualquer aplicação com interface em Android é necessário que se tenha ao menos uma Activity.
É importante ressaltar que a Activity é apenas a tela exibida, sem nenhum layout. Geralmente, para adicionarmos conteúdo nas activies, devemos utilizar os arquivos xml de layout do Android, nos quais definem-se todos os elementos visuais, tais como botões e imagens.
Aqui descreveremos uma utilização básica de Activity onde uma primeira Activity (Tela principal) chama outra Activity e esta retorna um valor para a primeira.
Inicialmente é preciso criar um novo projeto Android, com um nome de sua preferência.
Aqui estamos usando Android 2.2.
Depois a classe Primeiro será criada e o xml main.xml (em res->;layout) contendo os elementos que serão apresentados ao usuário, inicialmente apenas um texto.
Alteramos então o main.xml adicionando um botão.
main.xml
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”vertical”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
>
<Button
android:id=”@+id/botao”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”@string/botao” />
<TextView
android:id=”@+id/textoMain”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
/>
</LinearLayout>
Dessa forma temos na tela um botão com Id botao, que podemos acessar do Activity pelo método findViewById(Id) e um texto que exibirá nosso resultado.
Podemos então criar uma segunda Activity, com nome Segundo. Basta criar uma nova classe no seu pacote, que herde da classe Activity.

E podemos criar um novo xml para representar a tela dessa segunda Activity. Basta adicionar um novo arquivo Android XML em layout.
Obs: Os nomes dos recursos devem ser escritos em caracteres minúsculos.
Nesse xml adicionaremos um campo para o usuário escrever seu nome e um botão.
<LinearLayout
xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”vertical”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”>
<EditText
android:id=”@+id/texto”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”@string/texto”
/>
<Button android:text=”@string/botao2″
android:id=”@+id/botao2″
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”/>
</LinearLayout>
Agora que temos as duas telas prontas podemos fazer as duas se comunicarem.
Na Activity Primeiro, dentro do método onCreate e após a chamada de setContentView, criamos uma variável para acessar o botão criado na tela com o id botao.
1 | Button botao = (Button) findViewById(R.id.botao); |
Note que estamos recuperando o id do botão através da classe R, que é gerada pelo Eclipse sempre que alteramos algum recurso do projeto. Esta classe é responsável por mapear estes recursos, permitindo assim o seu acesso.
Adicionamos então um Listener ao botão para controlarmos a ação que ocorrerá quando o usuário clicar nele.
1 2 3 4 5 6 | botao.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent i = new Intent(Primeiro.this, Segundo.class); startActivityForResult(i, 1); } }); |
A classe Intent permite que realizemos a comunicação entre duas Activities passando diferentes tipos de informações. Tais informações podem ser quaisquer tipos primitivos de Java e objetos de classes serializáveis. Precisamos apenas informar a instância da Activity inicial e o tipo da que será chamada.
Existem vários métodos que iniciam activities, mas nesse caso é importante utilizar o método startActivityForResult, pois este permite capturar resultados fornecidos pela Activity chamada. Esse método irá criar a nova Activity (no caso a Segundo) e esperará um retorno assim que essa for encerrada. Além disso, passamos um código de requisição à segunda Activity , de acordo com a necessidade da aplicação.
Para receber o retorno da segunda Activity precisamos sobrescrever o método onActivityResult da classe Activity.
1 2 3 4 5 | public void onActivityResult(int requestCode, int resultCode, Intent data) { TextView t = (TextView) findViewById(R.id.textoMain); t.setText(data.getExtras().getString("valor")); } |
O objeto t é o texto que será exibido na tela. O valor recuperado em data.getExtras().getString(“valor”) é o retorno da segunda Activity, que é passado pelo Intent data.
A segunda Activity deve recuperar o valor que o usuário digitar e enviar a primeira Activity.
1 | Button botao = (Button) findViewById(R.id.botao2); |
1 | botao.setOnClickListener(new View.OnClickListener() { |
1 2 3 4 | public void onClick(View v) { Intent data = new Intent(); data.putExtra("valor", ((EditText)findViewById(R.id.texto)).getText().toString()); setResult(2, data); |
1 |
1 2 3 | finish(); } }); |
Como na primeira acessamos o botão com um Listener e criamos um Intent para enviar a resposta a primeira Activity. Usamos o método putExtra para adicionar o texto digitado com um chave “valor”, que será acessada na primeira Activity. E chamamos o setResult para adicionar o Intent como resultado dessa Activity. E finalizamos a Activity com finish.
Para acessar aplicativos nativos do Android como a lista de contatos também podemos usar o Intent, da seguinte forma:
Declaramos:
1 | static final int PICK_CONTACT_REQUEST = 0; |
E no onClick do botao temos:
1 2 3 4 5 6 | public void onClick(View v) { startActivityForResult( new Intent(Intent.ACTION_PICK, android.provider.ContactsContract.Contacts.CONTENT_URI), PICK_CONTACT_REQUEST); } |
Nesse caso instanciamos o Intent com uma ação de “escolha” ( Intent.ACTION_PICK) para o usuário selecionar um contato, a URI para acessar a lista de contatos (android.provider.ContactsContract.Contacts.CONTENT_URI) e código de requisição para identificar a operação (PICK_CONTACT_REQUEST).
E para exibir os dados do contato selecionado ao receber a resposta inicial podemos escrever o método onActivityResult dessa forma:
1 2 3 4 5 | if (requestCode == PICK_CONTACT_REQUEST) { if (resultCode == RESULT_OK) { startActivity(new Intent(Intent.ACTION_VIEW, data.getData())); } } |
Chamando uma outra Activity que exibe os dados do contato escolhido passados em uma URI que retorna no Intent em data.getData().

home

blog de design do c.e.s.a.r.
[...] Nota: O método abaixo deve fazer parte de uma Activity onde será chamado. Mais informações sobre Activities aqui. [...]