Activity! Criando Interfaces Gráficas no Android!

Dando continuação no artigo sobre o layout.xml.
Agora que construímos o layout da nossa tela, deveremos tratar as ações e eventos da mesma. Tais como cliques nos botões.

Essas responsabilidades pertencem a classe Activity. Essa classe esta presente na API do Android e com certeza se trata da Classe mais comum de ser vista em aplicativos Android. A Activity pode ser definida como uma tela na aplicação, apesar do seu conceito ser um pouco diferente. Como vimos no artigo passado a parte de layout de um aplicativo Android geralmente fica a cargo de um arquivo XML que controlará a parte gráfica da tela. Enquanto a Activity será responsável pelos eventos além de gerenciar o ciclo de vida da tela. Os eventos nos quais me refiro, são os cliques nos botões, a seleção de um Spinner (conhecido como combobox em outras tecnologias) dentre outros. Outra responsabilidade da Activity é o ciclo de vida. Toda Activity se inicia, permanece em contato com o usuário e posteriormente é eliminada (destruída) ou colocada em segundo plano. O Android gerencia as suas telas (Activitys) como uma pilha. A Activity que esta em primeiro lugar na pilha esta sendo exibida na tela, ao clicar no botão voltar ou quando acontece um telefonema no meio da execução do seu aplicativo. A tela que estava sendo exibida perderá a posição de primeiro lugar na pilha e a operação solicitada tomará o seu lugar. Para mais detalhes acompanhe o post  que eu encontrei na internet. O Android gerencia o seu ciclo de vida via métodos, como por exemplo quando a Acitivity for criada pela primeira vez o método onCreate presente na mesma será invocado. Quando o usuário sair da aplicação o método onDestroy por sua vez será invocado. Existem outros métodos que são executados entre esses dois, o link citado logo acima, demonstra de modo simples cada um deles.

 Dando continuidade ao exemplo

 Como vimos nosso layout simula um mini cadastro de pessoas, e conta com apenas dois componentes EditText um para armazenar o nome e outro para armazenar o e-mail. Ambos são chamados de editTextNome e editTextEmail respectivamente.

Obs: EditText é um componente no Android para entrada de texto. É nesse componente que o usuário digitará as informações que desejamos.

O layout também conta com um componente Button, que ao ser clicado irá recuperar os dados dos componentes EditText e os validará se estão preenchidos. Se estiver tudo bem, uma mensagem de sucesso irá aparecer no componente TextView que chamamos de textViewLegenda. Caso contrário uma mensagem de alerta será exposta no mesmo TextView.

A primeira pergunta que nos deparamos no momento de codificar essa Activity é: Como faremos referência nos componentes definidos no Layout.XML na Activity?

Logo abaixo segue um trecho do nosso arquivo Layout XML que usamos de exemplo, podemos ver que os componentes nos quais desejamos trabalhar na Activity possuem um atributo chamado de android:id como parâmetro desse id passamos uma String. Essa String se tornará o identificador que será usado para vincular os elementos com a Activity. Exemplo:

android:id="@+id/editTextNome"

Quando fazemos isso, estamos permitindo que seja criado uma constante com essa identificação na classe R. A classe R é uma estrutura criada e gerenciada pelo próprio Android,  que  possui a responsabilidade de fazer a ligação entre os recursos da aplicação, tais como layout.xml, imagens, dentre outras coisas. Essa classe é gerenciada pelo próprio Android, ou seja, não é necessário que o desenvolvedor edite algo nela. Com essa constante criada na classe R, conseguimos criar uma instancia do componente que desejamos através do método findViewById  da própria classe Activity. Esse método recebe como parâmetro um int e retorna um objeto da classe View.

OBS: A classe View é a super classe dos componentes gráficos como Buttons,EditText,TextView etc.

Também sabemos que o int que é requisitado com parâmetro é uma constante que esta na Classe R e é criada caso o desenvolvedor inclua o atributo android:id=(@+id/nome_do_atributo) no arquivo XML utilizado na Activity.

Vamos reforçar a ideia de que a classe R provida pelo Android não serve somente para gerenciar ID’s de interfaces gráficas. Todo o conteúdo de recursos que a sua aplicação faz uso, é acessado via essa classe. Daí o nome R uma abreviação para Resource.Vejamos um breve exemplo, caso voce coloque uma imagem na pasta Drawable e deseja acessa-la em algum ponto do seu sistema Android. Você só conseguirá acessa-la através da classe R numa sintaxe parecida com R.drawable.nome_da_imagem.

Isso é uma forma simples de vincular conteúdos extras com o código da sua aplicação.

Agora vamos analisar um exemplo de código para ver como as coisas são feitas na prática:

public class MainActivity extends Activity {

 private EditText editTextNome;
 private EditText editTextEmail;
 private EditText editTextTelefone;
 private TextView texViewLegenda;
 private Button buttonEnviar;

@Override
 public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main); // Faz um vínculo com o layout.XML que criamos no artigo passado.

editTextNome = (EditText)findViewById(R.id.editTextNome); // Recupera uma instancia de um componente pelo seu ID. Também definido no arquivo XML.
 editTextEmail = (EditText)findViewById(R.id.editTextEmail); // Veja que conseguimos acessá-los graças a Classe R.
 texViewLegenda = (TextView)findViewById(R.id.textViewLegenda);

buttonEnviar = (Button)findViewById(R.id.buttonEnviar);
 buttonEnviar.setOnClickListener(new View.OnClickListener() { // Forma de tratar um evento no Android. Através do padrão de projeto Observer.

@Override
 public void onClick(View v) {

 if(isTodosCamposPreenchidos(editTextNome,editTextEmail,editTextTelefone)) {
 texViewLegenda.setText(R.string.finalizado);
 } else {
 texViewLegenda.setText(R.string.falha);
 }

}

});
 }

private boolean isTodosCamposPreenchidos(EditText... editTexts) {

for(EditText editText : editTexts) {
 String valor = editText.getText().toString();
 if(valor == null || valor.length() == 0)
 return false; // existe campos sem estarem preenchidos!
 }

 return true; // Todos os campos estão preenchidos
 }
}

Um ponto importante que pode ser visto no código acima. É que para que a Activity tenha acesso aos componentes criados no layout XML deve ser vinculada ao Layout XML através do método setContentView(int id).

Agora nos já sabemos que o id que esta sendo pedido como parâmetro é o ID nosso layout xml, que esta na classe R representado pelo próprio nome do arquivo. O método setContentView geralmente é chamado no onCreate da nossa Activity, ou seja, no momento em que a tela será exposta para o usuário. O método onCreate é chamado apenas uma vez em todo o ciclo de vida de uma Activity.

Após isso recuperamos as instancias dos componentes através do método findViewById que também foi explicado anteriormente. Após vincularmos todos os componentes do nosso layout com a nossa Activity basta implementarmos a ação do nosso Button.

As ações de componentes no Android são gerenciadas via o padrão de projeto Observer, assim como é feito no Swing (biblioteca do java utilizada em projetos desktop). Basicamente o que acontece é que a classe Button do android possui o método setOnClickListener esse método  espera receber como parâmetro um objeto da interface OnClickListener esse objeto OnClickListener possui um método que deve ser implementado pelo desenvolvedor. O método: onClick(View view)  esse método que representará a ação do botão em si. Podemos ver na listagem acima que ele verifica se os campos estão preenchidos e coloca a reposta de sucesso ou não no nosso objeto TextView.

Para uma explicação mais ampla sobre o padrão observer segue o link.

Também é importante ressaltar um último ponto. Toda Activity da sua aplicação deverá ser informada no principal arquivo de configuração do Android, o AndroidManifest.xml.
Esse arquivo contém uma série de informações importantes da aplicação que esta sendo desenvolvida, dentre elas se encontram as Activitys disponíveis pela mesma.

Chegamos ao fim desse post sabendo como vincular um layout xml com uma classe Activity além de saber como tratar eventos dos componentes.

Já é um ótimo começo!

Pra finalizar Link que demonstra outras formas de tratar eventos de componentes Button no Android.

Anúncios
  1. Layout.xml! Iniciando o desenvolvimento para o Android! | Android On Board
  2. Meu primeiro aplicativo Android | Android On Board

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

%d bloggers like this: