Vous êtes sur la page 1sur 10

Desenvolvimento para Dispositivos Mveis Android

Aula 3 24 de fevereiro de 2014

Sumrio
Desenvolvimento para Dispositivos Mveis Android ....................................................................................... 1 1. 2. 3. 4. 5. 6. 7. Activities ...................................................................................................................................................... 1 Views ........................................................................................................................................................... 2 Viewgroups .................................................................................................................................................. 2 Associando uma Activity a uma View .......................................................................................................... 3 Trabalhando com Activities ......................................................................................................................... 3 Iniciando uma Nova Activity .................................................................................................................... 3 Passando parmetros para uma Activity ................................................................................................. 4 LogCat .......................................................................................................................................................... 5 Exerccio....................................................................................................................................................... 9

1. Activities
Como vimos anteriormente, Activity o componente que representa a tela, na qual o usurio interage com a aplicao. Cada atividade implementada como uma nica classe que estende a classe base android.app.Activity. Essa classe ir exibir uma interface de usurio composta de Views (componentes, como botes, caixas de texto, etc.) e ir responder a eventos. Como a maioria dos aplicativos consiste de mltiplas telas, teremos, em geral, uma Activity para cada uma delas. Por exemplo, um aplicativo de mensagens de texto pode ter uma tela que mostra uma lista de contatos para enviar mensagens e uma segunda tela para escrever a mensagem para o contato escolhido, alm de outras telas para rever as mensagens antigas ou alterar configuraes. Cada uma dessas telas seria implementada como uma atividade. Quando uma nova tela aberta, a tela anterior pausada e colocada em uma pilha de histrico. O usurio pode navegar para trs, atravs do histrico de telas abertas. O Android se encarrega de manter uma pilha de histrico para cada aplicativo iniciado a partir da tela inicial. Quando usamos o Eclipse para criar uma nova Activity, um arquivo de layout tambm gerado na pasta layout, contendo a definio da interface de usurio, que dever ser modificada pelo desenvolvedor conforme sua necessidade. O exemplo abaixo mostra uma classe chamada HelloWorldActivity, que extendeu a classe base android.app.Activity:

public class HelloWorldActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_hello_world); } } Cdigo 1 Tambm vimos anteriormente que os principais mtodos responsveis pelo ciclo de vida da Activity so: onCreate() o Chamado quando a activity criada. onStart() o Chamado aps o onCreate, e antes da Activity se tornar visvel para o usurio. onResume() o Chamado aps o onStart, quando a Activity se torna visvel para o usurio. onPause() o Chamado aps o onResume, quando a Activity est para perder a visibilidade para outra Activity. onStop() o A Activity no est mais visvel para o usurio. onDestroy() o A Activity est prestes a ser destruda. onRestart() o Chamado se a Activity foi parada (onStop) e est para ser iniciada novamente (onStart).

2. Views
As Views so componentes grcos que usamos para montar uma tela do nosso aplicativo e esto sempre ligadas s Activities, que controlam o seu comportamento. Uma View um objeto que estende a classe base android.view.View. uma estrutura de dados cujas propriedades armazenam o layout e contedo de uma rea retangular especfica da tela. Esta classe serve como base para todos os widgets, que um conjunto de subclasses totalmente implementadas que extraem elementos da tela interativa. Widgets permitem que voc possa construir a interface do usurio mais rapidamente. Alguns exemplos de widgets: TextView: componente para mostrar um texto na tela do aplicativo; EditText: campo de entrada de texto; Button: boto que dispara um evento; CheckBox: caixa de seleo; Etc.

3. Viewgroups
Uma ViewGroup um objeto da classe android.view.Viewgroup. Como o prprio nome indica, um ViewGroup um tipo especial de View cuja funo conter e gerenciar um conjunto de Views e outros Viewgroups.

A classe ViewGroup serve como uma classe base para os layouts - um conjunto de subclasses que fornecem telas com a disposio de elementos pr-determinada.

4. Associando uma Activity a uma View


As Activities possuem um mtodo chamado setContentView() que serve para denir a View que ser renderizada na tela do aplicativo. A Activity HelloWorldActivity mostrada no Codigo 1, por exemplo, faz uma chamada para este mtodo, passando como parmetro o nome do layout desejado. Observao: A chamada para o mtodo setContentView() deve ser feita sempre no mtodo onCreate da Activity.

5. Trabalhando com Activities


Um aplicativo do Android normalmente composto de vrias Activities, cada uma gerenciando uma tela deste aplicativo. Por exemplo, em um aplicativo podemos ter uma Activity responsvel por cadastrar um compromisso, outro por configurar as preferncias de uso da aplicao, outra para sincronizar nossa agenda com a internet, etc. O Android permite que uma Activity chame outra Activity, podendo trocar informaes entre si. Esta interao entre Activities feita atravs da classe Intent, que funciona como uma inteno de ao.

5.1. Iniciando uma Nova Activity


Para chamar uma Activity atravs de outra Activity usamos a classe Intent, informando ao Android que queremos iniciar uma nova Activity. Na Intent denimos qual a Activity que queremos abrir e, aps denida, chamamos o mtodo startActivity() passando essa Intent como parmetro para iniciar a Activity desejada. Criando o Intent: Intent myIntent = new Intent(<contexto>, <classe>); Onde: <contexto> contexto do pacote de aplicao (pode ser uma referncia Activity atual) <classe> a classe da Activity a ser iniciada. Para iniciar a Activity: startActivity(<intent>); Onde: <intent> o Intent que acabamos de criar. Por exemplo, o cdigo abaixo mostra como uma Activity chama outra a partir do evento de clique de um boto:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_activity); Button button = (Button)findViewById(R.id.button_back); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(ActualActivity.this, NovaActivity.class); startActivity(i); } }); }

Para fechar uma ACtivity, chamamos finish().

5.2. Passando parmetros para uma Activity


No exemplo do tpico anterior ns iniciamos uma Activity sem passar qualquer parmetro para ela. No entanto, h casos onde precisamos passar informaes ao invocar uma Activity. Para este fim, ns usamos o prprio Intent. Para enviar informaes de uma Activity para outra Activity, usamos os mtodos Intent.putExtras(): intent.putExtras(<nome do dado>, <valor>); Onde: <nome do dado> uma String que nomeia o dado que voc est passando <valor> um objeto qualquer (primitivo ou classe)

Assim, temos o seguinte exemplo:


@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_activity); Button button = (Button)findViewById(R.id.button_back); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(ActualActivity.this, NovaActivity.class);

String textoUsuario = textView.getText().toString(); intent.putExtra("StringUsuario", textoUsuario);


startActivity(i); } }); }

5.3. Iniciando uma Activity que deve retornar algum valor


Tambm podemos configurar uma Activity para que retorne algum parmetro, funcionando como se fosse uma funo que retorna algum valor.

Para isso, ao invs de iniciarmos a nova Activity atravs do comando startActivity(<intent>), usamos: startActivityForResult(<intent>, <request code>); Onde: <intent> o Intent que criamos; <request code> um inteiro que identifica a ao ou a Activity lanada. Exemplo:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_activity); Button button = (Button)findViewById(R.id.button_back); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int mycode = 1; Intent i = new Intent(ActualActivity.this, NovaActivity.class); startActivityForResult(i, myCode); } }); }

Assim a nova Activity ser lanada e, ao ser fechada, ir chamar o mtodo startActivityForResult() da Activity principal, retornando um conjunto de dados. O mtodo startActivityForResult() tem a seguinte assinatura: startActivityForResult(int requestCode, int resultCode, Intent data) Onde: requestCode - O inteiro que foi fornecido originalmente ao mtodo startActivityForResult(), permitindo que voc identifique de onde este resultado veio; resultCode - Um inteiro, representando um cdigo de resultado, retornado pela Activity lanada atravs do mtodo setResult(); data - Um Intent, que pode conter um conjunto de dados. Assim, para recebermos os parmetros de resposta que sero enviados pela nova Activity, temos que sobrescrever a funo onActivityResult() na nossa Activity principal:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1 && resultCode == RESULT_OK) { String strData = data.getStringExtra("extra_text"); mUserTextView.setText(strData); } }

Para recebermos os dados da Activity lanada, usamos o Intent data e o usamos como se fosse uma estrutura de dados Dicionrio (chave, valor). Portanto, precisamos saber qual a chave foi usada para armazenar o valor. Sabendo isso, podemos ler seu resultado assim:
String strData = data.getStringExtra(<chave>); Onde: <chave> uma String que identifica a entrada na estrutura Dicionrio;

Observao: Acima exemplificamos o obteno de uma String a partir do Intent data, mas existem outros mtodos equivalentes para outros tipos de data, como getIntExtra, para inteiros.

O cdigo da Activity lanada tambm deve ser alterada, de forma a enviar seus dados para quem a chamou. Para retornar um dado, devemos criar um Intent e us-lo como um dicionrio, adicionando uma entrada atravs do mtodo putExtra. Assinatura do mtodo putExtra: Intent.putExtra(<chave>, <dado>); Onde: <chave> uma String que identifica o dado; <dado> algum dado A seguir, devemos definir um resultado para nossa Activity, encaminhando o Intent recm criado. Fazemos isso atravs do comando setResult: setResult(<cdigo de resultado>, <Intent>) Onde: <cdigo de resultado> - Um cdigo de resultado. Geralmente RESULT_CANCELED ou RESULT_OK; <Intent> - O Intent que deve ser enviado Activity original; Exemplo:
private void enterClicked() { String strData = Uma string qualquer...; Intent intent = new Intent(); intent.putExtra("extra_text", strData); // Set Activity's result with result code RESULT_OK setResult(RESULT_OK, intent); // Finish the Activity finish(); }

6. LogCat
Quando se fala em Log, em um aplicativo desenvolvido em Java, a primeira coisa que vem em mente usar o System.out.println() para imprimir os logs no console. Porm o System.out.println() pouco produtivo e no permite a categorizao de mensagens de log. O Android j possui um sistema de Log padro, o chamado LogCat, disponvel atravs da classe android.util.Log. O LogCat disponibiliza mtodos estticos para facilitar o uso de mensagens de Log em nosso aplicativo e o utilizamos chamando estes mtodos atravs da seguinte sintaxe: Log.<mtodo>(<tag>, <mensagem>); Onde: <mtodo> o nome do mtodo, de acordo com o tipo de mensagem de Log que desejamos gerar; <tag> uma String que identifica um conjunto de sadas de log. Serve para facilitar a exibio/categorizao das mensagens de log; <mensagem> a mensagem que queremos apresentar na sada de Log. A tabela abaixo mostra alguns mtodos disponveis da classe android.util.Log: Mtodo Log.i(<tag>, <mensagem>) Log.w(<tag>, <mensagem>) Log.e(<tag>, <mensagem>) Log.d(<tag>, <mensagem>) Log.v(<tag>, <mensagem>) Tipo de mensagem de log Informao (info) Aviso (warning) Erro (error) Depurao (debug) Detalhes (verbose)

O cdigo abaixo exemplifica o uso do LogCat:

package com.example.testeapp; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.Menu; public class MainActivity extends Activity { private static final String LOG_TAG = "MainLog"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.i(LOG_TAG, "Mensagem de informao"); Log.w(LOG_TAG, "Mensagem de aviso"); Log.e(LOG_TAG, "Mensagem de erro"); Log.d(LOG_TAG, "Mensagem de depuracao"); Log.v(LOG_TAG, "Mensagem de detalhe"); } } Aps a execuo da aplicao, devemos procurar pela janelo do LogCat:

Porm, vemos que temos vrias outras sadas que no nos interessa. Para filtrar os resultados pelo tag que usamos na gerao do Log, fazemos o seguinte: Na janela do LogCat, clicamos no boto + , para criar um novo filtro de log; Damos um nome ao nosso filtro (podemos usar o mesmo nome da String de tag); Escrevemos o nome da String de tag que usamos na criao do Log e clicamos em Ok.

Depois s selecionar o filtro de log que acabamos de criar. No nosso exemplo, ele fica assim:

7. Exerccio
1. Importe o projeto Class3 para o workspace de seu Eclipse. 2. Crie as seguintes Strings no arquivo values\strings.xml: Nome: new_activity_button, valor: Inicia Atividade 2 3. Altere a String do boto existente no layout\activity_main.xml, para fazer uso da String que voc criou (nome new_activity_button) Substitua assim: android:text="@string/new_activity_button" /> 4. No mtodo onCreate, da classe MainActivity.java, crie um objeto Button e o associe com seu equivalente no arquivo de layout.xml Button button = (Button)findViewById(R.id.button_new_activity); 5. Adicione a seguinte clausula de import ao arquivo MainActivity.java import android.view.View.OnClickListener; 6. Adicione um listener de eventos de clique ao boto recm adicionado:
button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub } });

7. Dentro do evento onClick criado, crie tambm um novo Intent, com o propsito de iniciar a segunda Activity
Intent intent = new Intent(getApplicationContext(), ResultActivity.class);

8. Obtenha a String que o usurio digitou no campo de texto: 8.1. String textoUsuario = textView.getText().toString(); 9. Adicione a string ao Intent que voc criou, assim a outra Activity receber esse dado como um parmetro: 9.1. intent.putExtra("StringUsuario", textoUsuario); 10. Inicie a nova Activity
1. startActivity(i);

Vous aimerez peut-être aussi