Você está na página 1de 75

Capítulo 02: Cadastro de Alunos

Instrutor

● Programador desde 2000


● Aluno de doutorado
● Mestre em informática pelo
ICOMP/UFAM
● Especialista em aplicações
WEB – FUCAPI
● marcio.palheta@gmail.com
● sites.google.com/site/marcio
palheta

M.Sc. Márcio Palheta 2/75


Agenda
● Definições de projeto – Registro Acadêmico
● Pensando em Casos de Uso
● Criação de uma nova App
● Criação da Tela de Listagem de Alunos
● Trabalhando com ListView, List e Adapters
● Integração entre componentes de tela e controladores
● Alertas baseados no componente Toast
● Evento de clique simples em uma lista
● Evento de clique longo

M.Sc. Márcio Palheta 3/75


Definições de Projeto

● Como estratégia para apresentação do conteúdo deste


curso, realizaremos a implementação de uma app para
Manipulação de Dados de Alunos
● Em linhas gerais, nossa app consiste em:
– Manter dados de alunos;
– Entrar em contato com alunos;
– Trocar dados com um servidor WEB; E
– Compartilhar conteúdo em mídias ;

M.Sc. Márcio Palheta 4/75


Funcionalidades da nossa App

M.Sc. Márcio Palheta 5/75


Funcionalidades da nossa App

M.Sc. Márcio Palheta 6/75


Começando pelo cadastro
● Neste requisito da nossa
App, precisamos de:
● Uma tela para listar
Alunos
● E outra para cadastrar ou
alterar dados de Alunos
● A exclusão deve ocorrer
com a seleção de um
aluno na tela de listagem
● Vamos começar criando
uma nova Android
Application
M.Sc. Márcio Palheta 7/75
Exercício 01: Nova Android Application

M.Sc. Márcio Palheta 8/75


Exercício 01: Nova Android Application
● Clique em Next, até chegar à última tela:

M.Sc. Márcio Palheta 9/75


Estrutura de pastas da App

M.Sc. Márcio Palheta 10/75


Exercício 02: Tela de listagem

● Agora vamos definir a Tela de listagem de alunos


● Nossa tela precisa dos seguintes componentes:
– Lista: apresentação dos nomes dos alunos. O
componente com essa função é o ListView, que
recebe uma coleção de Objetos e lista seus dados
– Campo de texto: onde o usuário informa o nome de
um aluno que deseja incluir na listagem. Usaremos o
EditText
– Botão: para adicionar o nome do aluno à lista.
Usaremos o componente Button.

M.Sc. Márcio Palheta 11/75


Exercício 02: Tela de listagem
● Altere o arquivo: /res/values/strings.xml

M.Sc. Márcio Palheta 12/75


Exercício 02: Tela de listagem
● Altere o arquivo: /res/values/strings.xml

Strings usadas na
Tela de Listagem

M.Sc. Márcio Palheta 13/75


Exercício 02: Tela de listagem
● Altere: /res/layout/listaalunoslayout.xml

M.Sc. Márcio Palheta 14/75


Exercício 02: Tela de listagem
● Altere: /res/layout/listaalunoslayout.xml

Campo de Texto
id=edNomeListagem

M.Sc. Márcio Palheta 15/75


Exercício 02: Tela de listagem
● Altere: /res/layout/listaalunoslayout.xml

Componente Botão
id=btAddListagem

M.Sc. Márcio Palheta 16/75


Exercício 02: Tela de listagem
● Altere: /res/layout/listaalunoslayout.xml

Componente Lista
para exibir Alunos
id=lvListagem

M.Sc. Márcio Palheta 17/75


Exercício 02: Tela de listagem

● Execute sua App


● Repare que os os
componentes EditText e
Button estão visíveis
● No entanto, a ListView
não aparece
● Isso ocorre porque nossa
lista ainda está vazia

M.Sc. Márcio Palheta 18/75


Exercício 02: Tela de listagem
Campo de Texto e
Botão estão
● Execute sua App
disponíveis
● Repare que os os
componentes EditText e
Button estão visíveis
● No entanto, a ListView
não aparece
● Isso ocorre porque nossa
lista ainda está vazia

M.Sc. Márcio Palheta 19/75


Exercício 02: Tela de listagem
Campo de Texto e
Botão estão
● Execute sua App
disponíveis
● Repare que os os
componentes EditText e
Button estão visíveis
Nossa Lista de alunos
● No entanto, a está
ainda ListView
vazia
não aparece
● Isso ocorre porque nossa
lista ainda está vazia

M.Sc. Márcio Palheta 20/75


Controladores e as regras de negócio

● As telas (xml) que criamos em Android estão associadas


a classes Java (controladores), responsáveis pela
implementação de suas regras de negócio
● A nossa tela listaalunoslayou.xml é controlada pela
classe ListaAlunosActivity.java
● A classe de controle captura os eventos e
componentes da tela e implementa as regrasde negócio
necessárias às funcionalidades da nossa App

M.Sc. Márcio Palheta 21/75


Exercício 03: Atributos e coleção

M.Sc. Márcio Palheta 22/75


Exercício 03: Atributos e coleção

Componente de Tela,
acessados na classe
de controle

M.Sc. Márcio Palheta 23/75


Exercício 03: Atributos e coleção

Objeto que guarda a


coleção de Alunos

M.Sc. Márcio Palheta 24/75


Exercício 03: Atributos e coleção

Método que pode ser


usado para inicializar
os atributos

M.Sc. Márcio Palheta 25/75


Exercício 04: Inicialização de atributos

M.Sc. Márcio Palheta 26/75


Exercício 04: InicializaçãoO método
de atributos
setContentView(...)
associa uma Tela(.xml) a uma
classe de controle (Activity.java)

M.Sc. Márcio Palheta 27/75


Exercício 04: Inicialização de atributos
O método
findViewById(...) associa
componentes da View a
atributos da Activity

M.Sc. Márcio Palheta 28/75


Exercício 04: Inicialização de atributos

O método
setOnClickListener(...)
é usado para captura do
Clique do Botão

M.Sc. Márcio Palheta 29/75


Exercício 04: Inicialização de atributos

O método
É comum utilizarmos uma
setOnClickListener(...)
implementação anônima
é usado para captura do
da Interface OnClickListener
Clique do Botão

M.Sc. Márcio Palheta 30/75


Itens a ponderar

● Precisamos inicializar a coleção de alunos e exibir os


nomes na nossa ListView
● Contudo, uma ListView é um componente de tela que
pode assumir diversos formatos de visualização
● Com isso, a ListView precisa da ajuda de alguém que
saiba como organizar os dados na tela
● Ou seja, a ListView precisa do apoio de um Adaptador,
que saiba converter objetos Java para componetes de
Tela. Chamamos esse Objeto de apoio de Adapter.

M.Sc. Márcio Palheta 31/75


ListView's com layouts diferentes

M.Sc. Márcio Palheta 32/75


Exercício 05: Novos atributos

M.Sc. Márcio Palheta 33/75


Exercício 05: Novos atributos

Declaração de
Novos Atributos

M.Sc. Márcio Palheta 34/75


Exercício 05: Novos atributos

Objeto que converte


Listas e Vetores Declaração de
em View Novos Atributos

M.Sc. Márcio Palheta 35/75


Exercício 05: Novos atributos

Declaração de
Novos Atributos
Definição do Layout
que o Adapter usará

M.Sc. Márcio Palheta 36/75


Passo-a-passo

● Agora que já:


– associamos objetos java a componentes de tela
– e criamos o adptador que sabe exibir List<Strings>
● Vamos inicializar:
– A coleção de nomes de Alunos(List<Strings>);
– O adaptador (ArrayAdapter<String>); e
– A ListView que vai exibir os nomes na tela;
● No final, associaremos o adaptador à ListView

M.Sc. Márcio Palheta 37/75


Exercício 06: Inicialização da ListView

M.Sc. Márcio Palheta 38/75


Exercício 06: Inicialização da ListView

Declaração de
Novos Atributos

M.Sc. Márcio Palheta 39/75


Exercício 06: Inicialização da ListView

Declaração de
Inicializa a coleção de Novos Atributos
nomes de Alunos

M.Sc. Márcio Palheta 40/75


Exercício 06: Inicialização da ListView

Declaração de
Inicializa o Adapter, com Novos Atributos
a atividade contexto (this),
layout padrão(adapterLayout) e a
coleção de alunos (listaAlunos)

M.Sc. Márcio Palheta 41/75


Exercício 06: Inicialização da ListView

Declaração de
Novos Atributos

Associação do
Adapter à ListView

M.Sc. Márcio Palheta 42/75


Passo-a-passo
● Agora, podemos atualizar o evento de clique do botão
Adicionar Aluno;
● Maaaas, o que devemos fazer quando do clique?
● Precisamos:
– Adicionar o nome digitado no campo edNome à
coleção listaAlunos;
– Limpar o conteúdo do campo edNome; e
– Atualizar o conteúdo da ListView

M.Sc. Márcio Palheta 43/75


Exercício 07: Evento de Click do botão
● No final do método onCreate(), inclua:
Implementação do
Evento de Clique

M.Sc. Márcio Palheta 44/75


Exercício 07: Evento de Click do botão
● No final do método onCreate(), inclua:
Implementação do
Evento de Clique

Adiciona o nome
Informado no campo
edNome à coleção

M.Sc. Márcio Palheta 45/75


Exercício 07: Evento de Click do botão
● No final do método onCreate(), inclua:
Implementação do
Evento de Clique

Limpa o conteúdo
do campo edNome

M.Sc. Márcio Palheta 46/75


Exercício 07: Evento de Click do botão
● No final do método onCreate(), inclua:
Implementação do
Evento de Clique

Atualiza o conteúdo
da ListView

M.Sc. Márcio Palheta 47/75


Dando um “confere” no resultado
● Rode sua App
● Inclua alguns nomes
● Ainda poderíamos agregar
mais alguma
funcionalidade?
● Que tal exibir um alerta
com o nome do aluno,
quando do clique em um
nome da lista?

M.Sc. Márcio Palheta 48/75


Evento de click da ListView
● Assim como Button, a ListView possui o evento de click
● Contudo, a ListView apresenta dois tipos de click:
– Click curto, quando o usuário clica em um item da
ListView; e
– Click Longo, quando o usuário clica e segura um
item da ListView ;
● Vamos implementar os eventos de clique Longo e Simples
no final do método onCreate()

M.Sc. Márcio Palheta 49/75


Exercício 08: Cliques da ListView

M.Sc. Márcio Palheta 50/75


Implementação do Evento
Exercício 08: Cliques da ListView de Clique Simples

M.Sc. Márcio Palheta 51/75


Implementação do Evento
Exercício 08: Cliques da ListView de Clique Simples

Implementação do Evento
de Clique Longo

M.Sc. Márcio Palheta 52/75


Implementação do Evento
Exercício 08: Cliques da ListView de Clique Simples

Implementação do Evento
de Clique Longo

Retorno == true: não executa o click simples


Retorno == false: executa o click simples

M.Sc. Márcio Palheta 53/75


Resultado dos cliques

M.Sc. Márcio Palheta 54/75


Resultado dos cliques

M.Sc. Márcio Palheta 55/75


E quando giramos o device?

M.Sc. Márcio Palheta 56/75


E quando giramos o device?

Antes do giro,
lista preenchida :-)

M.Sc. Márcio Palheta 57/75


E quando giramos o device?

Antes do giro,
lista preenchida :-)

Depois do giro,
lista vazia :-(

M.Sc. Márcio Palheta 58/75


E quando giramos o device?

Antes do giro,
lista preenchida :-)
Quando giramos o device,
o Android invoca novamente
o método onCreate() da Depois do giro,
nossa Activity lista vazia :-(

M.Sc. Márcio Palheta 59/75


E quando giramos o device?

Antes do giro,
lista preenchida :-)
Quando giramos o device,
o Android invoca novamente
o método onCreate() da Depois do giro,
nossa Activity lista vazia :-(

Com isso, todos os


componentes retornam
ao estado inicial

M.Sc. Márcio Palheta 60/75


Persistência do estado da Activity
● Podemos armazenar o estado da app antes dela ser
pausada, parada ou destruída
● Para isso, utilizamos Métodos de Callback, que são
métodos usados quando o cliente requer um retorno do
servidor, mas não quer ficar bloqueado, esperando.
● onSaveInstanceState(): chamado quando o Android vai
destruir a Activity, mas sabe que vai restaurá-la depois;
– Não é chamado quando usuário clica em Back
● onRestoreInstanceState(): Chamado antes da Activity
destruída ser chamada pelo usuário

M.Sc. Márcio Palheta 61/75


Persistência do estado da Activity

M.Sc. Márcio Palheta 62/75


Persistência do estado da Activity
● Para salvar o estado da Activity, podemos usar o objeto
Bundle, gerenciado pelo Android
● O Bundle empacota um java.util.Map
● O Objeto Bundle é passado pelo Android aos métodos
onCreate(), onSaveInstanceState() e
onRestoreInstanceState()
● Podemos utilizar o Map empacotado no Bundle para
armazenar o estado da nossa App

M.Sc. Márcio Palheta 63/75


Passo-a-passo
● Na classe ListaAlunosActivity, defina duas constantes:
– String TAG = "CADASTRO_ALUNO" – Usada para
registro de mensagens de LOG no Logcat
– String ALUNOS_KEY = "LISTA" – Usada como Chave
para o Map do Objeto Bundle;
● Implemente os métodos onSaveInstanceState() e
onRestoreInstanceState()
● Atualize o método onCreate(), para tentar recuperar a
chave ALUNOS_KEY do Bundle

M.Sc. Márcio Palheta 64/75


Exercício 09: Salvar estado da Activity
● No início da Activity, vamos incluir as novas constantes:

M.Sc. Márcio Palheta 65/75


Exercício 09: Salvar estado da Activity
● No início da Activity, vamos incluir as novas constantes:

M.Sc. Márcio Palheta 66/75


Exercício 09: Salvar estado da Activity

● Após a definição de atributos, inclua o novo método:

M.Sc. Márcio Palheta 67/75


Exercício 09: Salvar estado da Activity

● Após a definição de atributos, inclua o novo método:

M.Sc. Márcio Palheta 68/75


Exercício 09: Salvar estado da Activity

● Após o método onSaveInstanceState(), inclua:

M.Sc. Márcio Palheta 69/75


Exercício 09: Salvar estado da Activity

● Após o método onSaveInstanceState(), inclua:

M.Sc. Márcio Palheta 70/75


E agora, quando giramos o device...

Antes do giro,
lista preenchida :-)
Depois do giro,
lista continua
preenchida :-)

M.Sc. Márcio Palheta 71/75


Resultado exibido no LogCat

● Pelas mensagens de log, verificamos a lista de alunos


sendo salva e recuperada do objeto Bundle

M.Sc. Márcio Palheta 72/75


O que vem a seguir?
● Tela de Dados do Aluno
● Persistência com SQLite
● Intents
● Câmera e arquivos
● LayoutInflater
● Serviços de background
● Integração via JSON

M.Sc. Márcio Palheta 73/75


Referências

● www.caelum.com.br
● d.android.com
● LECHETA, Ricardo. Google Android, 3a edição,
Novatec, São Paulo, 2013
● Código fonte completo:
https://github.com/marciopalheta/cursosandroid

M.Sc. Márcio Palheta 74/75


Capítulo 02: Cadastro de Alunos

Você também pode gostar