Este documento descreve como criar uma tela de listagem de alunos em Android. Ele explica como criar uma nova aplicação Android, definir a tela de listagem com componentes como ListView, EditText e Button, e implementar a lógica para adicionar itens à lista e exibir os eventos de clique na lista.
2. 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
3. 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
4. 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
7. 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
11. 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
12. Exercício 02: Tela de listagem
●
Altere o arquivo: /res/values/strings.xml
M.Sc. Márcio Palheta
12/75
13. 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
14. Exercício 02: Tela de listagem
●
Altere: /res/layout/listaalunoslayout.xml
M.Sc. Márcio Palheta
14/75
15. Exercício 02: Tela de listagem
●
Altere: /res/layout/listaalunoslayout.xml
Campo de Texto
id=edNomeListagem
M.Sc. Márcio Palheta
15/75
16. Exercício 02: Tela de listagem
●
Altere: /res/layout/listaalunoslayout.xml
Componente Botão
id=btAddListagem
M.Sc. Márcio Palheta
16/75
17. 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
18. 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
19. 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
20. 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
entanto, a está vazia
ainda ListView
No
não aparece
Isso ocorre porque nossa
lista ainda está vazia
M.Sc. Márcio Palheta
20/75
21. 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
27. Exercício 04: Inicialização métodoatributos
O de setContentView(...)
associa uma Tela(.xml) a uma
classe de controle (Activity.java)
M.Sc. Márcio Palheta
27/75
28. 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
29. 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
30. Exercício 04: Inicialização de atributos
O método
setOnClickListener(...)
é usado para captura do
Clique do Botão
É comum utilizarmos uma
implementação anônima
da Interface OnClickListener
M.Sc. Márcio Palheta
30/75
31. 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
35. Exercício 05: Novos atributos
Objeto que converte
Listas e Vetores
em View
Declaração de
Novos Atributos
M.Sc. Márcio Palheta
35/75
36. 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
37. Passo-a-passo
●
Agora que já:
–
–
●
associamos objetos java a componentes de tela
e criamos o adptador que sabe exibir List<Strings>
Vamos inicializar:
–
–
O adaptador (ArrayAdapter<String>); e
–
●
A coleção de nomes de Alunos(List<Strings>);
A ListView que vai exibir os nomes na tela;
No final, associaremos o adaptador à ListView
M.Sc. Márcio Palheta
37/75
40. Exercício 06: Inicialização da ListView
Declaração de
Novos Atributos
Inicializa a coleção de
nomes de Alunos
M.Sc. Márcio Palheta
40/75
41. Exercício 06: Inicialização da ListView
Declaração de
Novos Atributos
Inicializa o Adapter, com
a atividade contexto (this),
layout padrão(adapterLayout) e a
coleção de alunos (listaAlunos)
M.Sc. Márcio Palheta
41/75
42. Exercício 06: Inicialização da ListView
Declaração de
Novos Atributos
Associação do
Adapter à ListView
M.Sc. Márcio Palheta
42/75
43. 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
44. 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
45. 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
46. 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
47. 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
48. 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
49. 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
52. Implementação do Evento
de Clique Simples
Exercício 08: Cliques da ListView
Implementação do Evento
de Clique Longo
M.Sc. Márcio Palheta
52/75
53. Implementação do Evento
de Clique Simples
Exercício 08: Cliques da ListView
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
57. E quando giramos o device?
Antes do giro,
lista preenchida :-)
M.Sc. Márcio Palheta
57/75
58. E quando giramos o device?
Antes do giro,
lista preenchida :-)
Depois do giro,
lista vazia :-(
M.Sc. Márcio Palheta
58/75
59. E quando giramos o device?
Antes do giro,
lista preenchida :-)
Quando giramos o device,
o Android invoca novamente
o método onCreate() da
nossa Activity
M.Sc. Márcio Palheta
Depois do giro,
lista vazia :-(
59/75
60. E quando giramos o device?
Antes do giro,
lista preenchida :-)
Quando giramos o device,
o Android invoca novamente
o método onCreate() da
nossa Activity
Depois do giro,
lista vazia :-(
Com isso, todos os
componentes retornam
ao estado inicial
M.Sc. Márcio Palheta
60/75
61. 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
63. 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
64. 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
65. Exercício 09: Salvar estado da Activity
●
No início da Activity, vamos incluir as novas constantes:
M.Sc. Márcio Palheta
65/75
66. Exercício 09: Salvar estado da Activity
●
No início da Activity, vamos incluir as novas constantes:
M.Sc. Márcio Palheta
66/75
67. 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
68. 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
69. Exercício 09: Salvar estado da Activity
●
Após o método onSaveInstanceState(), inclua:
M.Sc. Márcio Palheta
69/75
70. Exercício 09: Salvar estado da Activity
●
Após o método onSaveInstanceState(), inclua:
M.Sc. Márcio Palheta
70/75
71. E agora, quando giramos o device...
Antes do giro,
lista preenchida :-)
Depois do giro,
lista continua
preenchida :-)
M.Sc. Márcio Palheta
71/75
72. 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
73. 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