75
Capítulo 02: Cadastro de Alunos

Capítulo 02: Cadastro de Alunos - mrmsistemas.com.br · 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

Embed Size (px)

Citation preview

Capítulo 02: Cadastro de Alunos

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

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

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 ;

M.Sc. Márcio Palheta 5/75

Funcionalidades da nossa App

M.Sc. Márcio Palheta 6/75

Funcionalidades da nossa App

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

M.Sc. Márcio Palheta 8/75

Exercício 01: Nova Android Application

M.Sc. Márcio Palheta 9/75

Exercício 01: Nova Android Application

● Clique em Next, até chegar à última tela:

M.Sc. Márcio Palheta 10/75

Estrutura de pastas da App

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.

M.Sc. Márcio Palheta 12/75

Exercício 02: Tela de listagem

● Altere o arquivo: /res/values/strings.xml

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

M.Sc. Márcio Palheta 14/75

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

M.Sc. Márcio Palheta 15/75

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

Campo de Textoid=edNomeListagem

M.Sc. Márcio Palheta 16/75

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

Componente Botãoid=btAddListagem

M.Sc. Márcio Palheta 17/75

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

Componente Listapara exibir Alunos

id=lvListagem

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

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

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

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

M.Sc. Márcio Palheta 22/75

Exercício 03: Atributos e coleção

M.Sc. Márcio Palheta 23/75

Exercício 03: Atributos e coleção

Componente de Tela, acessados na classe

de controle

M.Sc. Márcio Palheta 24/75

Exercício 03: Atributos e coleção

Objeto que guarda a coleção de Alunos

M.Sc. Márcio Palheta 25/75

Exercício 03: Atributos e coleção

Método que pode serusado para inicializar

os atributos

M.Sc. Márcio Palheta 26/75

Exercício 04: Inicialização de atributos

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)

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

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

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

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.

M.Sc. Márcio Palheta 32/75

ListView's com layouts diferentes

M.Sc. Márcio Palheta 33/75

Exercício 05: Novos atributos

M.Sc. Márcio Palheta 34/75

Exercício 05: Novos atributos

Declaração de Novos Atributos

M.Sc. Márcio Palheta 35/75

Exercício 05: Novos atributos

Declaração de Novos Atributos

Objeto que converteListas e Vetores

em View

M.Sc. Márcio Palheta 36/75

Exercício 05: Novos atributos

Declaração de Novos Atributos

Definição do Layoutque o Adapter usará

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

M.Sc. Márcio Palheta 38/75

Exercício 06: Inicialização da ListView

M.Sc. Márcio Palheta 39/75

Exercício 06: Inicialização da ListView

Declaração de Novos Atributos

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

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)

M.Sc. Márcio Palheta 42/75

Exercício 06: Inicialização da ListView

Declaração de Novos Atributos

Associação do Adapter à ListView

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

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

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

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

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

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?

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()

M.Sc. Márcio Palheta 50/75

Exercício 08: Cliques da ListView

M.Sc. Márcio Palheta 51/75

Exercício 08: Cliques da ListViewImplementação do Evento

de Clique Simples

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

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

M.Sc. Márcio Palheta 54/75

Resultado dos cliques

M.Sc. Márcio Palheta 55/75

Resultado dos cliques

M.Sc. Márcio Palheta 56/75

E quando giramos o device?

M.Sc. Márcio Palheta 57/75

E quando giramos o device?

Antes do giro, lista preenchida :-)

M.Sc. Márcio Palheta 58/75

E quando giramos o device?

Antes do giro, lista preenchida :-)

Depois do giro, lista vazia :-(

M.Sc. Márcio Palheta 59/75

E quando giramos o device?

Antes do giro, lista preenchida :-)

Quando giramos o device, o Android invoca novamente

o método onCreate() danossa Activity

Depois do giro, lista vazia :-(

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 :-(

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

M.Sc. Márcio Palheta 62/75

Persistência do estado da Activity

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

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

M.Sc. Márcio Palheta 65/75

Exercício 09: Salvar estado da Activity

● No início da Activity, vamos incluir as novas constantes:

M.Sc. Márcio Palheta 66/75

Exercício 09: Salvar estado da Activity

● No início da Activity, vamos incluir as novas constantes:

M.Sc. Márcio Palheta 67/75

Exercício 09: Salvar estado da Activity

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

M.Sc. Márcio Palheta 68/75

Exercício 09: Salvar estado da Activity

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

M.Sc. Márcio Palheta 69/75

Exercício 09: Salvar estado da Activity

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

M.Sc. Márcio Palheta 70/75

Exercício 09: Salvar estado da Activity

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

M.Sc. Márcio Palheta 71/75

E agora, quando giramos o device...

Antes do giro, lista preenchida :-)

Depois do giro, lista continua preenchida :-)

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

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

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

Capítulo 02: Cadastro de Alunos