capítulo 02 - cadastro de alunos e decisões de projeto

75
Capítulo 02: Cadastro de Alunos

Upload: marcio-palheta

Post on 11-Jun-2015

4.433 views

Category:

Technology


1 download

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 Bundle

TRANSCRIPT

Page 1: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto

Capítulo 02: Cadastro de Alunos

Page 2: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto

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

[email protected]

● sites.google.com/site/marciopalheta

Page 3: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto

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

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

M.Sc. Márcio Palheta 5/75

Funcionalidades da nossa App

Page 6: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto

M.Sc. Márcio Palheta 6/75

Funcionalidades da nossa App

Page 7: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

M.Sc. Márcio Palheta 54/75

Resultado dos cliques

Page 55: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto

M.Sc. Márcio Palheta 55/75

Resultado dos cliques

Page 56: Capítulo 02 - Cadastro de Alunos e Decisões de Projeto

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Capítulo 02: Cadastro de Alunos