Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se...
Transcript of Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se...
![Page 1: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/1.jpg)
App Alunos
![Page 2: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/2.jpg)
•Implementação de uma app para Manipulação de Dados de Alunos
Em linhas gerais, a 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 ;
Definições de Projeto
![Page 3: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/3.jpg)
Funcionalidade da App
![Page 4: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/4.jpg)
CADASTRO DE ALUNOS
![Page 5: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/5.jpg)
• Neste requisito da nossa App, precisamos de:
• Uma tela para listar Alunos
• Outra para cadastrar ou alterar dados de Alunos
• A exclusão deve ocorrer com a seleção de um aluno na tela de listagem
Começando pelo Cadastro
![Page 6: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/6.jpg)
• Componentes:
Nome do aluno que se deseja incluir na listagem
EditText
Botão para adicionar o nome do aluno à lista.
Button
Lista com nomes dos alunos.
ListView, que recebe uma coleção de Objetos e
lista seus dados
Tela Inicial: Listagem dos alunos
![Page 7: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/7.jpg)
Listaalunoslayout.xml
Campo de Texto
id=edNomeListagem
![Page 8: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/8.jpg)
Listaalunoslayout.xml
Componente Botão
id=brAddListagem
![Page 9: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/9.jpg)
Listaalunoslayout.xml
Componente Lista
para exibir alunos
id=lvListagem
![Page 10: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/10.jpg)
• Observe:
Componentes EditText e Button estão visíveis
No entanto, a ListView não aparece
Isso ocorre porque nossa lista ainda está vazia
Tela Inicial: Listagem dos alunos
Texto nome do
aluno e o botão
estão visíveis
Lista alunos ainda
vazia
![Page 11: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/11.jpg)
• Os layouts xml (telas) estão associadas a classes Java (controladores), responsáveis pela implementação de suas regras de negócio
• listaalunoslayou.xml é controlada pela classe ListaAlunosActivity.java
• A classe de controle deve capturar os eventos e componentes da tela e implementar as regras de negócio necessárias às funcionalidades da App
Controladores a as regras de negócio
![Page 12: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/12.jpg)
Atributos
Componentes da
tela acessados pela
classe de controle
Coleção de alunos
Método para inicializar
os atributos
![Page 13: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/13.jpg)
Inicialização dos Atributos
Associa a tela (layout)
ao controlador (java)
Associa componentes
da View a atributos da
Activity
Captura o click no
botão
![Page 14: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/14.jpg)
Inicialização dos Atributos
Implementação anônima do
OnClickListener
![Page 15: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/15.jpg)
• É preciso inicializar a coleção de alunos e exibir os nomes na ListView
• Porém, ListView pode assumir diversos formatos de visualização
• ListView precisa da ajuda de alguém que saiba como organizar os dados na tela
ListView precisa do apoio de um Adaptador, que saiba converter objetos Java para componentes de Tela: Adapter.
Observações com relação ao ListView
![Page 16: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/16.jpg)
ListView com Layouts diferentes
![Page 17: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/17.jpg)
Novos atributos
Declaração dos novos
atributos
Converte listas e
vetores em View
Define o layout que o
Adapter usará
![Page 18: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/18.jpg)
• Associar objetos java a componentes de tela
• Criar o adaptador que exibe List<Strings>
• Inicializar:
A coleção de nomes de Alunos(List<Strings>);
O adaptador (ArrayAdapter<String>); e
A ListView que vai exibir os nomes na tela;
• Por fim, associar o adaptador à ListView
Passo a Passo
![Page 19: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/19.jpg)
Inicialização da ListView
![Page 20: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/20.jpg)
• Atualizar o evento de clique do botão Adicionar Aluno;
Adicionar o nome digitado no campo edNome à coleção listaAlunos;
Limpar o conteúdo do campo edNome; e
Atualizar o conteúdo da ListView
Passo a passo
![Page 21: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/21.jpg)
Evento de click no botão
Implementação do
Evento de clique
Adiciona o nome
informado em edNome
na coleção
Limpa
conteúdo
de edNome
Atualiza o conteúdo
do ListView
![Page 22: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/22.jpg)
• Inclua alguns nomes
• É possível agregar mais alguma funcionalidade?
• Que tal exibir um alerta com o nome do aluno, quando do clique em um nome da lista?
Conferindo o Resultado
![Page 23: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/23.jpg)
• Assim como Button, a ListView possui o evento de click. Porém, são 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()
Evento de click no ListView
![Page 24: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/24.jpg)
Cliques da ListView Implementação do
Evento de clique
simples
Implementação do
Evento de clique
longo
true: não executa o
click simples
false: executa o click
simples
![Page 25: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/25.jpg)
E quando giramos o dispositivo?
Depois do giro:
Lista Vazia!
Quando giramos o
dispositivo, o Android
invoca novamente o
método onCreate() da
Activity
Todos os componentes
retornam ao estado
inicial
![Page 26: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/26.jpg)
• Podemos armazenar o estado da app antes dela ser pausada, parada ou destruída
• 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
Persistindo o estado da Activity
![Page 27: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/27.jpg)
Persistindo o estado da Activity
![Page 28: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/28.jpg)
• Para salvar o estado da Activity, usamos 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
Persistindo o estado da Activity
![Page 29: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/29.jpg)
• Na classe ListaAlunosActivity, defina rduas 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;
• Implementar os métodos onSaveInstanceState() e onRestoreInstanceState()
• Atualizar o método onCreate(), para tentar recuperar a chave ALUNOS_KEY do Bundle
Passo a Passo
![Page 30: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/30.jpg)
• Incluir novas constantes:
Salvar estado da Activity
![Page 31: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/31.jpg)
• Incluir o novo método para salvar:
Salvar estado da Activity
![Page 32: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/32.jpg)
• Após salvar, incluir o método para restaurar:
Restaurar estado da Activity
![Page 33: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/33.jpg)
Agora quando giramos o dispositivo...
Depois do giro,
lista continua
preenchida
![Page 34: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/34.jpg)
• Pelas mensagens de log, verificamos a lista de alunos sendo salva e recuperada do objeto Bundle
Resultado exibido no LogCat
![Page 35: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/35.jpg)
MELHORANDO A APP
![Page 36: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/36.jpg)
• Precisamos Cadastrar e Alterar os dados do aluno
Dados: Foto, Nome, Fone, Endereço, Site, E-mail e Nota
• Como o dispositivo possui uma tela limitada, criaremos uma nova Activity (tela) para edição dos dados dos alunos.
Incrementando o cadastro
![Page 37: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/37.jpg)
• Formulário para cadastro de alunos
• Novos componentes:
ImageView: para exibir a foto o usuário, armazenada no próprio device;
SeekBar: para que o usuário escolha uma nota, dentro de um intervalo
Tela de Cadastro de Alunos
![Page 38: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/38.jpg)
formulario.xml
![Page 39: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/39.jpg)
AndroidManifest.xml
![Page 40: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/40.jpg)
AndroidManifest.xml
Nossa app
![Page 41: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/41.jpg)
AndroidManifest.xml
Tela de listagem
![Page 42: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/42.jpg)
AndroidManifest.xml
Define ListaAlunoActivity como
tela inicial da app
![Page 43: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/43.jpg)
AndroidManifest.xml
Tela formulário
![Page 44: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/44.jpg)
Alterando a tela inicial para formulário
Tela formulário
Seta formulário como página inicial
![Page 45: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/45.jpg)
• Torne novamente a ListaAlunosActivity a tela inicial da nossa aplicação:
Antes de prosseguir...
Tela de listagem
![Page 46: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/46.jpg)
• Com duas telas na App, é necessário algum mecanismo para navegar entre elas
• Para isso, é comum o uso menus. Toda Activity sabe tratar menus, basta sobrescrever o método:
onCreateOptionsMenu(Menu menu), que recebe do Android um menu vazio
• O próprio Android se encarrega de encaixar o menu na tela
• Para exibir o menu da App:
Basta clicar no Botão Menu do device
Navegação entre telas
![Page 47: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/47.jpg)
• Apesar da possibilidade de definição de Menus no código Java, é mais comum o uso de arquivos XML:
• O método Activity.onCreateOptionsMenu retorna true para indicar que o menu deve ser exibido na tela
Estratégia para definição de Menus
<item
android:id="@+id/menu_novo"
android:icon="@drawable/ic_novo"
android:showAsAction="always"
android:title="Novo"/>
<item
android:id="@+id/menu_mapa"
android:icon="@drawable/ic_mapa"
android:showAsAction="always"
android:title="Mapa"/>
![Page 48: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/48.jpg)
• O Android precisa ler o XML com itens do menu e criar objetos do tipo View, a partir das tags
• Essa é a especialidades dos Inflaters
• O MenuInflater é especialista em carregar XML de menu
• O método Activity.onCreateOptionsMenu(Menu menu) nos oferece um objeto Menu vazio, que pode ser utilizado pelo MenuInflater para carregar um XML com itens do menu
• O método Activity.getMenuInflater() nos devolve um MenuInflater
• Inflater.inflate(): lê um XML e carrega um Menu
Estratégia para definição de Menus
![Page 49: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/49.jpg)
• Altere o nome da App no arquivo strings.xml
Menu principal
![Page 50: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/50.jpg)
•Crie o arquivo XML: res/menu/menu_principal:
Menu principal
É comum que apenas
dois Itens do Menu
fiquem visíveis e os
demais, ocultos
![Page 51: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/51.jpg)
Menu principal (cont...)
![Page 52: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/52.jpg)
•Altere o método onCreateOptionsMenu(Menu menu) da classe ListaAlunosActivity:
Menu Principal
![Page 53: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/53.jpg)
Executando a App...
![Page 54: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/54.jpg)
• Para monitorar o click, precisaremos implementar o método onOptionsItemSelected da ListaAlunosActivity
• Por enquanto, exibiremos apenas uma mensagem num Toast, quando o usuário clicar no item NOVO:
Eventos de click
![Page 55: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/55.jpg)
Executando
![Page 56: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/56.jpg)
•Configurada a ActionBar, podemos incrementar ainda mais nossa App.
•Vamos fazer com que o clique no menu NOVO faça surgir a tela de Formulário
Usamos objetos do tipo Intent, que recebem um contexto e uma Activity que deve ser exibida
•Depois de configurada nossa Intenção, podemos iniciar a nova tela (startActivity)
Navegação entre telas da nossa App
![Page 57: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/57.jpg)
•No método de clique da ListaAlunosActivity:
Abrir formulário
![Page 58: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/58.jpg)
Fechar o Formulário
![Page 59: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/59.jpg)
ARMAZENANDO DO DADOS EM BD
![Page 60: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/60.jpg)
MVC em Android
Exibir tela
Entrada
de dados
modelo.getEstado()
modelo.atualizaEstado()
Notificação de
mudanças
Tela.atualizarVisao()
![Page 61: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/61.jpg)
• A tela de Listagem da App permite o cadastro do nome dos alunos e os exibe em uma ListView
• Porém, surgem alguns problemas nessa abordagem:
Os dados são perdidos quando a App é destruída
Precisamos de outros dados para o Aluno
• Como resposta, poderíamos:
Persistir os dados em um Bando de Dados
Usar a tela de Formulário para cadastro e alteração de dados do Aluno
Persistência com SQLite
![Page 62: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/62.jpg)
• Não se esqueça dos métodos get/set
Criar um bean Aluno
![Page 63: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/63.jpg)
•no método onCreate() da Activity, temos de povoar um bean Aluno com dados da tela:
Pensando na arquitetura...
![Page 64: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/64.jpg)
• A complexidade da Activity aumenta, à medida que novas funcionalidades vão sendo implementadas
• É uma boa prática de programação isolar pequenas responsabilidades em outras classes.
• Assim, a Activity passa a realizar o seu trabalho interagindo com pequenos especialistas
• Neste cenário, é possível implementar o padrão de projeto View Helper, que define a criação de classes especialistas em ext rair e tratar dados das telas
Ainda, pensando na arquitetura
![Page 65: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/65.jpg)
O Helper
Atributos que representam os dados da tela
Atributo que armazena a referência a um Aluno
![Page 66: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/66.jpg)
• Método construtor que recebe um FormularioActivity
O Helper (cont.) O construtor recebe um FormularioActivity
Associa atributos do Helper a componentes da tela
Criação do objeto Aluno
![Page 67: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/67.jpg)
O Helper (final) Retorna Aluno com dados vindos da tela
Seta os atributos do aluno nos campos da tela
Retorna referência para um objeto Aluno
![Page 68: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/68.jpg)
•Agora que aclasse FormularioHelper está pronta, podemos utilizá-la na classe de controle FormularioActivity
•Para isso, é preciso:
criar um atributo FormularioHelper
criar um objeto Helper no método onCreate()
utilizar os dados do Aluno em qualquer método que necessite desse objeto (reuso)
•Nessa App, vamos usar o click do botão para exibir o nome do aluno
Usando o Helper
![Page 69: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/69.jpg)
Usando o Helper na View Definição do novo atributo FormularioHelper
Inicialização do helper,
passando uma
referência para o
objeto atual(this)
Pedindo do Helper
uma referência a
Aluno Usando o novo objeto
Aluno
![Page 70: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/70.jpg)
• O ViewHelper extrai os dados de Aluno da tela
• Vamos armazenar esses dados em um Banco de Dados relacional SQLite
• Para converter Objetos Java em Relações do banco de dados, vamos utilizar o padrão de projeto DAO
• DAO (Data Access Object) define que, para cada tabela do banco, criamos uma classe de persitência
Ex: para a tabela Aluno, teremos uma classe AlunoDAO, responsável pelo CRUD do aluno
Hora de persistir os dados
![Page 71: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/71.jpg)
• Crie a classe para persistir dados do Aluno:
AlunoDAO
Classe DAO para persistir dados de Aluno
Filha da classe de
persistência
SQLiteOpenHelper
![Page 72: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/72.jpg)
• Controle de versão do BD
Usando o SQLite
![Page 73: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/73.jpg)
• Em AlunoDAO, crie o método onCreate():
Criação da Tabela
![Page 74: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/74.jpg)
• Na classe AlunoDAO, crie o método onUpdate():
Atualização da Tabela
![Page 75: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/75.jpg)
AlunoDAO.cadastrar()
![Page 76: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/76.jpg)
• Agora que a camada de modelo está preparada para o cadastro do aluno, podemos atualizar nossa tela de formulário;
• No click do botão de Salvar, vamos:
Pedir um objeto Aluno do Helper;
Abrir uma conexão com BD, criando AlunoDAO;
Cadastrar o novo Aluno no BD; e
Fechar a conexão com o banco de dados
Atualização da FormularioActivity
![Page 77: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/77.jpg)
Botão Salvar
![Page 78: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/78.jpg)
• Para visualizar os dados do BD, precisamos atualizar as camadas de visão, controle e modelo
• Na camada de modelo,
criar o método listar()
• Nas camadas de visão e controle:
Remover o EditText e Button
• Na camada de controle,
alterar o método onCreate() da ListaAlunosActivity para chamar o método listar() da camada de modelo e apagar os métodos:
onSaveInstanceState() e onRestoreInstanceState()
Para ver o que foi salvo...
![Page 79: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/79.jpg)
• Início no método para recuperar um Alunos do BD:
AlunoDAO.listar()
![Page 80: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/80.jpg)
AlunoDAO.listar() (final)
![Page 81: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/81.jpg)
Criar método Aluno.toString()
![Page 82: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/82.jpg)
• Alterar o arquivo: /res/layout/listaalunoslayout.xml
• Deixar apenas a ListView
Atualização da Tela inicial
![Page 83: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/83.jpg)
•No método onCreate() da ListaAlunosActivity, deixar apenas a associação da ListView
Atualizar camada de controle
![Page 84: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/84.jpg)
•Nossa coleção de Alunos deve deixar de ser List<String> e se tornar List<Aluno>
•Alterar, também, o tipo do ArrayAdapter
Mudança de tipos
![Page 85: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/85.jpg)
• Na ListaAlunosActivity, criar o método carregarLista() para acesso ao DAO e carregar a coleção de Alunos
Carga dos dados
![Page 86: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/86.jpg)
• Na classe ListaAlunosActivity, criar o método onResume()
• Nesse método, fazer a chamada a carregarLista()
Carga no OnResume()
![Page 87: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/87.jpg)
Executando App
![Page 88: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/88.jpg)
•Para completar o cadastro de alunos, falta implementar as rotinas de:
Alterar; e
Excluir Alunos
•Para alterar um registro, é comum o uso de um click curto, indicando sua seleção
•Na exclusão, é comum um click longo, que abre um pequeno menu, para selecionar uma ação
Completando o sistema
![Page 89: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/89.jpg)
EXCLUSÃO DE CLIENTE
![Page 90: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/90.jpg)
• No Android, há o ContextMenu, que abre um menu exclusivo para um item da lista
• Para avisar ao Android que a ListView possui um menu de contexto, é preciso marcá-la: registerForContextMenu()
• Criar um arquivo .xml para descrever os itens que devem ser exibidos no ContextMenu
• No método onCreateContextMenu() da Activity, usar um Inflater para inflar as opções do menu:
Opções: Ligar, Enviar SMS, Achar no Mapa, Navegar no
site, Enviar E-mail e Deletar, etc...
Menu de Contexto
![Page 91: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/91.jpg)
• Incluir novas chaves em /res/values/strings.xml
Atualização das Strings
![Page 92: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/92.jpg)
• Na pasta /res/menu, criar um Android XML File
• Informe o nome do novo arquivo: menu_contexto
Criando o Menu de Contexto
![Page 93: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/93.jpg)
AlunoDAO.deletar()
![Page 94: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/94.jpg)
•Na classe ListaAlunosActivity, incluir um atributo para marcar o aluno selecionado no Click Longo da ListView
Novo Atributo
![Page 95: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/95.jpg)
• Atualize o método ListaAlunosActivity.onCreate():
Atualização do onCreate
Não consome o Click Curto,
para
que o ContextMenu seja
exibido
![Page 96: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/96.jpg)
Confirmação de exclusão
![Page 97: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/97.jpg)
ContextMenu da Activity
![Page 98: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/98.jpg)
Executando a App
![Page 99: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/99.jpg)
Executando a App
![Page 100: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/100.jpg)
Resultado...
![Page 101: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/101.jpg)
EDITANDO DADOS DO ALUNO
![Page 102: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/102.jpg)
• Criar a funcionalidade para alterar os dados de um aluno
• Ao acionar o click longo da ListView, a App exibe um menu de contexto, com possíveis ações para o Aluno
• No click curto, chamar a tela de formulário, carregada com os dados do aluno selecionado
• Como enviar o aluno selecionado na ListaAlunosActivity para FormularioActivity?
Vamos usar Intents para enviar objetos Serializáveis de uma Activity para outra
Edição dos dados do aluno
![Page 103: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/103.jpg)
•Para realizar a edição de dados do Aluno, precisamos:
Tornar o bean Aluno “Serializável”
Implementar o método AlunoDAO.alterar(Aluno);
Enviar um objeto Aluno da ListaAlunosActivity para FormularioActivity;
Carregar o formulário com os dados do Aluno; e
Verificar se é necessário cadastrar ou alterar os dados do Aluno;
Passo a passo
![Page 104: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/104.jpg)
Aluno Serializável
![Page 105: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/105.jpg)
AlunoDAO.alterar() Valores que serão
enviados para o BD
Valores dos
parâmetros
da cláusula
WHERE
Atualização dos
dados do Aluno
![Page 106: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/106.jpg)
• Na ListaAlunosActivity, atualize o click da ListView:
Transição de telas
Intenção de navegar
de ListaAlunosActivity
para FormularioActivity
Recupera o
aluno
selecionado
Compartilha o objeto
Aluno com a nova tela Inicia a tela de
Formulário
![Page 107: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/107.jpg)
• Adicione o método setAluno(Aluno) em FormularioHelper
Atualizar formulário
![Page 108: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/108.jpg)
• Atualize o método FormularioActivity.onCreate():
Dados na tela
Recupera o objeto
Aluno enviado pela
ListaAlunosActivity
![Page 109: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/109.jpg)
• Atualize o click do botão salvar da FormularioActivity
Alterar ou Cadastrar?
![Page 110: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/110.jpg)
Execute a App
![Page 111: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/111.jpg)
• Vez por outra, pode ser necessário que nossa App acesse recursos do próprio device, como:
Câmera, Arquivos, Internet etc
• Para que o acesso seja autorizado, precisamos registrar esses interesses no AndroidManifest.xml
• Incluir a tag uses-permission e informar o valor para sua propriedade android:name
• Exemplo para solicitação de acesso à câmera:
<uses-permission
android:name="android.permission.CAMERA"/>
Permissões de Acesso
![Page 112: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/112.jpg)
• Inclua as solicitações de Acesso entre as tags:
<uses-sdk /> e <application>
Permissões de Acesso
![Page 113: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/113.jpg)
• Inclua as seguintes permissões no AndroidManifest.xml:
Permissões de Acesso
![Page 114: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/114.jpg)
• Em nossa aplicação, precisamos realizar uma chamada telefônica para um aluno;
• O Android nos oferece duas estratégias para isso:
acessar o telefone em baixo nível e controlar todo o ciclo de vida da chamada (pode não ser uma boa ideia)
usar uma Intent que já sabe fazer ligações telefônicas: Intent.ACTION_CALL
• O Android oferece várias Activities prontas para acesso a funcionalidades do device
Intents implícitas
![Page 115: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/115.jpg)
• Altere o método onContextItemSelected da ListaAlunos:
Ações do ContextMenu
![Page 116: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/116.jpg)
• Altere o método onContextItemSelected da ListaAlunos:
• Inclua opções para ver Aluno no Mapa e Navegar no site●
Ações do ContextMenu
Padrão para
Busca em mapa
Item que Navega
no site do Aluno
![Page 117: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/117.jpg)
• Altere o método onContextItemSelected da ListaAlunos:
• Última opção: Enviar e-mail para aluno.
Ações do ContextMenu
![Page 118: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/118.jpg)
Teste do envio de e-mail
Click LONGO
![Page 119: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/119.jpg)
Teste do envio de e-mail
Selecione o item
Enviar E-mail
![Page 120: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/120.jpg)
Teste do envio de e-mail
Escolha a
Forma de
Envio
Escolha a
Forma de
Envio
![Page 121: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/121.jpg)
•Para completar o cadastro do aluno, queremos usar a câmera para capturar sua foto;
•O arquivo .jpeg da foto ficará armazenado no device
•No SQLite, guardaremos apenas o caminho para o arquivo físico
•Na hora de carregar a foto, recupera-se o caminho armazenado no SQLite, acessa o device e faz-se a carga a imagem na tela.
Completando a App
![Page 122: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/122.jpg)
• No Android, também existem as classes tradicionais de arquivos:
FileInputStream e FileOutputStream;
• A Activity tem métodos para gerar esses objetos:
FileInputStream stream = openFileInput("arquivo.txt");
• E se você precisar trabalhar com memória externa?
File diretorio = Enviroment.getExternalStorageDirectory()
• Devolve um diretório externo, provavelmente, um sdcard
Recordando...
![Page 123: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/123.jpg)
•O android nos oferece duas formas de manipular câmera, assim como ocorreu com a Chamada Telefônica
usar e controlar todo o ciclo de vida e opções do uso da câmera, como, por exemplo, habilita flash e controlar a entrada de luz
chamar uma Activity especialista no tratamento da câmera. Essa Activity recebe como parâmetro, o local para salvar a foto capturada.
Parece que a 2a alternativa é mais simples.
Usando a Câmera
![Page 124: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/124.jpg)
• Crie o método FormularioHelper.carregarFoto()
Carregar jpeg com a foto
Converte um
Arquivo em um
Objeto JAVA
Definição de uma
Imagem reduzida
Atualiza o
atributo foto
do Aluno
Atualiza a imagem
na Tela
![Page 125: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/125.jpg)
Alterar o FormularioHelper para contemplar a foto
![Page 126: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/126.jpg)
• Para acessar a câmera, vamos seguir a estratégia de chamar uma Intent implícita, especialista em câmera:
Intent irParaCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
• Podemos informar o local para salvar a foto:
irParaCamera.putExtra(MediaStore.EXTRA_OUTPUT, localFoto);
• E esperar o retorno, com nome do arquivo gerado.
• Para isso, informamos um código para a requisição (requestCode), comumente associado a uma constante:
startActivityForResult(irParaCamera, FAZER_FOTO);
Chamando a câmera
![Page 127: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/127.jpg)
• O retorno do método startActivityForResult() vem no callback method onActivityResult()
@Override protected void onActivityResult( int requestCode, int resultCode, Intent data) { … }
• O requestCode == FAZER_FOTO
• Já o resultCode pode ser:
RESULT_OK: ocorreu tudo bem. :-)
RESULT_CANCELED: em caso de problemas ou cancelamento :-(
Chamando a câmera (cont.)
![Page 128: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/128.jpg)
• Na classe FormularioActivity, inclua novos atributos para lidar com a câmera:
Novas mudanças no formulário
![Page 129: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/129.jpg)
• No método FormularioActivity.onCreate(), implemente o click da foto:
Click da Imagem
![Page 130: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/130.jpg)
• No método FormularioActivity.onCreate(), implemente o click da foto:
Click da Imagem
Local em que
a Foto será
armazenada
Referência para
o Local de
armazenamento
Intent Implícita
para uso da
câmera
Chamando a
Câmera
![Page 131: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/131.jpg)
• No método FormularioActivity.onCreate(), implemente o click da foto:
Click da Imagem
Chamando a
Câmera
Parâmetro: local de
armazenamento
Inicia a Activity da
Câmera. A resposta é
lançada no método de
Callback
onActivityResult()
Parâmetro: local de
armazenamento
![Page 132: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/132.jpg)
• Na ForumlarioActivity, crie o método onActivityResult(), para verificar o resultado retornado pela Intent da Câmera:
Verificação do resultado
Tratamento
da resposta
da Intent da
câmera
![Page 133: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/133.jpg)
Testando... Click na
ImageView
Capture a
imagem
Salve a
imagem
![Page 134: Cadastro de Alunos - FACOMbacala/ANDROID/7 - App Alunos.pdf•Componentes: Nome do aluno que se deseja incluir na listagem EditText Botão para adicionar o nome do aluno à lista.](https://reader033.fdocument.pub/reader033/viewer/2022041515/5e2aac5cf70acd669828222e/html5/thumbnails/134.jpg)
• Quando cadastramos um aluno, o formulário está vazio;
• Se clicar na foto, a câmera é chamada;
• A foto é, então, salva no dispositivo;
• Assim, é exibida na tela de formulário;
• Porém, se girarmos a tela, o que acontece?
• Isso mesmo, a foto é perdida.
• Como Resolver esse problema, recorrente em Android Apps?
• Ideia fantástica: tente usar o Bundle.
Desafio...