capítulo 02 - cadastro de alunos e decisões de projeto
DESCRIPTION
Segunda aula do curso básico de formação Android. Meu objetivo é ajudar programadores iniciantes a enveredarem pelos caminhos dessa plataforma que ganha mais espaço no mercado, a cada dia que passa. Discutimos temas como: 1. Definições de uma App, baseada em Casos de Uso; 2. Como trabalhar com Internacionalização (I18N) ? 3. Layouts e componentes EditText, Button e ListView; 4. Como implementar Eventos de Click do Botão? 5. Como trabalhar com ListView e Adapter(s) ? 6. Notificações de atualização do Adapter; 7. ListView e os clicks Curto (OnItemClickListener) e Longo (OnItemLongClickListener) 8. Persistência do estado da Activity utilizando BundleTRANSCRIPT
![Page 1: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/1.jpg)
Capítulo 02: Cadastro de Alunos
![Page 2: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/2.jpg)
M.Sc. Márcio Palheta 2/75
Instrutor
● Programador desde 2000
● Aluno de doutorado
● Mestre em informática pelo ICOMP/UFAM
● Especialista em aplicações WEB – FUCAPI
● sites.google.com/site/marciopalheta
![Page 3: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/3.jpg)
M.Sc. Márcio Palheta 3/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
![Page 4: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/4.jpg)
M.Sc. Márcio Palheta 4/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 ;
![Page 5: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/5.jpg)
M.Sc. Márcio Palheta 5/75
Funcionalidades da nossa App
![Page 6: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/6.jpg)
M.Sc. Márcio Palheta 6/75
Funcionalidades da nossa App
![Page 7: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/7.jpg)
M.Sc. Márcio Palheta 7/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
![Page 8: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/8.jpg)
M.Sc. Márcio Palheta 8/75
Exercício 01: Nova Android Application
![Page 9: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/9.jpg)
M.Sc. Márcio Palheta 9/75
Exercício 01: Nova Android Application
● Clique em Next, até chegar à última tela:
![Page 10: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/10.jpg)
M.Sc. Márcio Palheta 10/75
Estrutura de pastas da App
![Page 11: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/11.jpg)
M.Sc. Márcio Palheta 11/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.
![Page 12: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/12.jpg)
M.Sc. Márcio Palheta 12/75
Exercício 02: Tela de listagem
● Altere o arquivo: /res/values/strings.xml
![Page 13: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/13.jpg)
M.Sc. Márcio Palheta 13/75
Exercício 02: Tela de listagem
● Altere o arquivo: /res/values/strings.xml
Strings usadas naTela de Listagem
![Page 14: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/14.jpg)
M.Sc. Márcio Palheta 14/75
Exercício 02: Tela de listagem● Altere: /res/layout/listaalunoslayout.xml
![Page 15: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/15.jpg)
M.Sc. Márcio Palheta 15/75
Exercício 02: Tela de listagem● Altere: /res/layout/listaalunoslayout.xml
Campo de Textoid=edNomeListagem
![Page 16: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/16.jpg)
M.Sc. Márcio Palheta 16/75
Exercício 02: Tela de listagem● Altere: /res/layout/listaalunoslayout.xml
Componente Botãoid=btAddListagem
![Page 17: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/17.jpg)
M.Sc. Márcio Palheta 17/75
Exercício 02: Tela de listagem● Altere: /res/layout/listaalunoslayout.xml
Componente Listapara exibir Alunos
id=lvListagem
![Page 18: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/18.jpg)
M.Sc. Márcio Palheta 18/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
![Page 19: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/19.jpg)
M.Sc. Márcio Palheta 19/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
Campo de Texto e Botão estãodisponíveis
![Page 20: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/20.jpg)
M.Sc. Márcio Palheta 20/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
Campo de Texto e Botão estãodisponíveis
Nossa Lista de alunos ainda está vazia
![Page 21: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/21.jpg)
M.Sc. Márcio Palheta 21/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
![Page 22: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/22.jpg)
M.Sc. Márcio Palheta 22/75
Exercício 03: Atributos e coleção
![Page 23: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/23.jpg)
M.Sc. Márcio Palheta 23/75
Exercício 03: Atributos e coleção
Componente de Tela, acessados na classe
de controle
![Page 24: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/24.jpg)
M.Sc. Márcio Palheta 24/75
Exercício 03: Atributos e coleção
Objeto que guarda a coleção de Alunos
![Page 25: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/25.jpg)
M.Sc. Márcio Palheta 25/75
Exercício 03: Atributos e coleção
Método que pode serusado para inicializar
os atributos
![Page 26: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/26.jpg)
M.Sc. Márcio Palheta 26/75
Exercício 04: Inicialização de atributos
![Page 27: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/27.jpg)
M.Sc. Márcio Palheta 27/75
Exercício 04: Inicialização de atributosO método setContentView(...) associa uma Tela(.xml) a uma
classe de controle (Activity.java)
![Page 28: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/28.jpg)
M.Sc. Márcio Palheta 28/75
Exercício 04: Inicialização de atributos
O método findViewById(...) associacomponentes da View a
atributos da Activity
![Page 29: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/29.jpg)
M.Sc. Márcio Palheta 29/75
Exercício 04: Inicialização de atributos
O método setOnClickListener(...)é usado para captura do
Clique do Botão
![Page 30: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/30.jpg)
M.Sc. Márcio Palheta 30/75
Exercício 04: Inicialização de atributos
O método setOnClickListener(...)é usado para captura do
Clique do Botão
É comum utilizarmos umaimplementação anônima
da Interface OnClickListener
![Page 31: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/31.jpg)
M.Sc. Márcio Palheta 31/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.
![Page 32: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/32.jpg)
M.Sc. Márcio Palheta 32/75
ListView's com layouts diferentes
![Page 33: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/33.jpg)
M.Sc. Márcio Palheta 33/75
Exercício 05: Novos atributos
![Page 34: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/34.jpg)
M.Sc. Márcio Palheta 34/75
Exercício 05: Novos atributos
Declaração de Novos Atributos
![Page 35: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/35.jpg)
M.Sc. Márcio Palheta 35/75
Exercício 05: Novos atributos
Declaração de Novos Atributos
Objeto que converteListas e Vetores
em View
![Page 36: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/36.jpg)
M.Sc. Márcio Palheta 36/75
Exercício 05: Novos atributos
Declaração de Novos Atributos
Definição do Layoutque o Adapter usará
![Page 37: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/37.jpg)
M.Sc. Márcio Palheta 37/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
![Page 38: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/38.jpg)
M.Sc. Márcio Palheta 38/75
Exercício 06: Inicialização da ListView
![Page 39: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/39.jpg)
M.Sc. Márcio Palheta 39/75
Exercício 06: Inicialização da ListView
Declaração de Novos Atributos
![Page 40: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/40.jpg)
M.Sc. Márcio Palheta 40/75
Exercício 06: Inicialização da ListView
Declaração de Novos AtributosInicializa a coleção de
nomes de Alunos
![Page 41: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/41.jpg)
M.Sc. Márcio Palheta 41/75
Exercício 06: Inicialização da ListView
Declaração de Novos AtributosInicializa o Adapter, com
a atividade contexto (this),layout padrão(adapterLayout) e a
coleção de alunos (listaAlunos)
![Page 42: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/42.jpg)
M.Sc. Márcio Palheta 42/75
Exercício 06: Inicialização da ListView
Declaração de Novos Atributos
Associação do Adapter à ListView
![Page 43: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/43.jpg)
M.Sc. Márcio Palheta 43/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
![Page 44: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/44.jpg)
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 doEvento de Clique
![Page 45: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/45.jpg)
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 doEvento de Clique
Adiciona o nomeInformado no campo
edNome à coleção
![Page 46: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/46.jpg)
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 doEvento de Clique
Limpa o conteúdodo campo edNome
![Page 47: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/47.jpg)
M.Sc. Márcio Palheta 47/75
Exercício 07: Evento de Click do botão● No final do método onCreate(), inclua:
Implementação doEvento de Clique
Atualiza o conteúdoda ListView
![Page 48: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/48.jpg)
M.Sc. Márcio Palheta 48/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?
![Page 49: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/49.jpg)
M.Sc. Márcio Palheta 49/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()
![Page 50: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/50.jpg)
M.Sc. Márcio Palheta 50/75
Exercício 08: Cliques da ListView
![Page 51: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/51.jpg)
M.Sc. Márcio Palheta 51/75
Exercício 08: Cliques da ListViewImplementação do Evento
de Clique Simples
![Page 52: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/52.jpg)
M.Sc. Márcio Palheta 52/75
Exercício 08: Cliques da ListViewImplementação do Evento
de Clique Simples
Implementação do Evento de Clique Longo
![Page 53: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/53.jpg)
M.Sc. Márcio Palheta 53/75
Exercício 08: Cliques da ListViewImplementação do Evento
de Clique Simples
Implementação do Evento de Clique Longo
Retorno == true: não executa o click simplesRetorno == false: executa o click simples
![Page 54: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/54.jpg)
M.Sc. Márcio Palheta 54/75
Resultado dos cliques
![Page 55: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/55.jpg)
M.Sc. Márcio Palheta 55/75
Resultado dos cliques
![Page 56: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/56.jpg)
M.Sc. Márcio Palheta 56/75
E quando giramos o device?
![Page 57: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/57.jpg)
M.Sc. Márcio Palheta 57/75
E quando giramos o device?
Antes do giro, lista preenchida :-)
![Page 58: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/58.jpg)
M.Sc. Márcio Palheta 58/75
E quando giramos o device?
Antes do giro, lista preenchida :-)
Depois do giro, lista vazia :-(
![Page 59: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/59.jpg)
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() danossa Activity
Depois do giro, lista vazia :-(
![Page 60: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/60.jpg)
M.Sc. Márcio Palheta 60/75
E quando giramos o device?
Antes do giro, lista preenchida :-)
Com isso, todos os componentes retornam
ao estado inicial
Quando giramos o device, o Android invoca novamente
o método onCreate() danossa Activity
Depois do giro, lista vazia :-(
![Page 61: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/61.jpg)
M.Sc. Márcio Palheta 61/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
![Page 62: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/62.jpg)
M.Sc. Márcio Palheta 62/75
Persistência do estado da Activity
![Page 63: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/63.jpg)
M.Sc. Márcio Palheta 63/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
![Page 64: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/64.jpg)
M.Sc. Márcio Palheta 64/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
![Page 65: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/65.jpg)
M.Sc. Márcio Palheta 65/75
Exercício 09: Salvar estado da Activity
● No início da Activity, vamos incluir as novas constantes:
![Page 66: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/66.jpg)
M.Sc. Márcio Palheta 66/75
Exercício 09: Salvar estado da Activity
● No início da Activity, vamos incluir as novas constantes:
![Page 67: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/67.jpg)
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:
![Page 68: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/68.jpg)
M.Sc. Márcio Palheta 68/75
Exercício 09: Salvar estado da Activity
● Após a definição de atributos, inclua o novo método:
![Page 69: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/69.jpg)
M.Sc. Márcio Palheta 69/75
Exercício 09: Salvar estado da Activity
● Após o método onSaveInstanceState(), inclua:
![Page 70: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/70.jpg)
M.Sc. Márcio Palheta 70/75
Exercício 09: Salvar estado da Activity
● Após o método onSaveInstanceState(), inclua:
![Page 71: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/71.jpg)
M.Sc. Márcio Palheta 71/75
E agora, quando giramos o device...
Antes do giro, lista preenchida :-)
Depois do giro, lista continua preenchida :-)
![Page 72: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/72.jpg)
M.Sc. Márcio Palheta 72/75
Resultado exibido no LogCat
● Pelas mensagens de log, verificamos a lista de alunos sendo salva e recuperada do objeto Bundle
![Page 73: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/73.jpg)
M.Sc. Márcio Palheta 73/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
![Page 74: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/74.jpg)
M.Sc. Márcio Palheta 74/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
![Page 75: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto](https://reader033.vdocuments.pub/reader033/viewer/2022051616/5579a0cfd8b42ac1148b47ad/html5/thumbnails/75.jpg)
Capítulo 02: Cadastro de Alunos