Capítulo 02: Cadastro de Alunos
Instrutor
●

Programador desde 2000

●

Aluno de doutorado

●

●

●

●

Mestre em informática pelo
ICOMP/UFAM
Especialista em aplicações
WEB – FUCAPI
marcio.palheta@gmail.com
sites.google.com/site/marcio
palheta
M.Sc. Márcio Palheta

2/75
Agenda
●

Definições de projeto – Registro Acadêmico

●

Pensando em Casos de Uso

●

Criação de uma nova App

●

Criação da Tela de Listagem de Alunos

●

Trabalhando com ListView, List e Adapters

●

Integração entre componentes de tela e controladores

●

Alertas baseados no componente Toast

●

Evento de clique simples em uma lista

●

Evento de clique longo
M.Sc. Márcio Palheta

3/75
Definições de Projeto
●

●

Como estratégia para apresentação do conteúdo deste
curso, realizaremos a implementação de uma app para
Manipulação de Dados de Alunos
Em linhas gerais, nossa app consiste em:
–

Manter dados de alunos;

–

Entrar em contato com alunos;

–

Trocar dados com um servidor WEB; E

–

Compartilhar conteúdo em mídias ;

M.Sc. Márcio Palheta

4/75
Funcionalidades da nossa App

M.Sc. Márcio Palheta

5/75
Funcionalidades da nossa App

M.Sc. Márcio Palheta

6/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

7/75
Exercício 01: Nova Android Application

M.Sc. Márcio Palheta

8/75
Exercício 01: Nova Android Application
●

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

M.Sc. Márcio Palheta

9/75
Estrutura de pastas da App

M.Sc. Márcio Palheta

10/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

11/75
Exercício 02: Tela de listagem
●

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

M.Sc. Márcio Palheta

12/75
Exercício 02: Tela de listagem
●

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

Strings usadas na
Tela de Listagem

M.Sc. Márcio Palheta

13/75
Exercício 02: Tela de listagem
●

Altere: /res/layout/listaalunoslayout.xml

M.Sc. Márcio Palheta

14/75
Exercício 02: Tela de listagem
●

Altere: /res/layout/listaalunoslayout.xml
Campo de Texto
id=edNomeListagem

M.Sc. Márcio Palheta

15/75
Exercício 02: Tela de listagem
●

Altere: /res/layout/listaalunoslayout.xml

Componente Botão
id=btAddListagem

M.Sc. Márcio Palheta

16/75
Exercício 02: Tela de listagem
●

Altere: /res/layout/listaalunoslayout.xml

Componente Lista
para exibir Alunos
id=lvListagem

M.Sc. Márcio Palheta

17/75
Exercício 02: Tela de listagem
●

●

●

●

Execute sua App
Repare que os os
componentes EditText e
Button estão visíveis
No entanto, a ListView
não aparece
Isso ocorre porque nossa
lista ainda está vazia

M.Sc. Márcio Palheta

18/75
Exercício 02: Tela de listagem
●

●

●

●

Campo de Texto e
Botão estão
Execute sua App
disponíveis

Repare que os os
componentes EditText e
Button estão visíveis
No entanto, a ListView
não aparece
Isso ocorre porque nossa
lista ainda está vazia

M.Sc. Márcio Palheta

19/75
Exercício 02: Tela de listagem
●

●

●

●

Campo de Texto e
Botão estão
Execute sua App
disponíveis

Repare que os os
componentes EditText e
Button estão visíveis
Nossa Lista de alunos
entanto, a está vazia
ainda ListView

No
não aparece

Isso ocorre porque nossa
lista ainda está vazia

M.Sc. Márcio Palheta

20/75
Controladores e as regras de negócio
●

●

●

As telas (xml) que criamos em Android estão associadas
a classes Java (controladores), responsáveis pela
implementação de suas regras de negócio
A nossa tela listaalunoslayou.xml é controlada pela
classe ListaAlunosActivity.java
A classe de controle captura os eventos e
componentes da tela e implementa as regrasde negócio
necessárias às funcionalidades da nossa App

M.Sc. Márcio Palheta

21/75
Exercício 03: Atributos e coleção

M.Sc. Márcio Palheta

22/75
Exercício 03: Atributos e coleção
Componente de Tela,
acessados na classe
de controle

M.Sc. Márcio Palheta

23/75
Exercício 03: Atributos e coleção

Objeto que guarda a
coleção de Alunos

M.Sc. Márcio Palheta

24/75
Exercício 03: Atributos e coleção

Método que pode ser
usado para inicializar
os atributos

M.Sc. Márcio Palheta

25/75
Exercício 04: Inicialização de atributos

M.Sc. Márcio Palheta

26/75
Exercício 04: Inicialização métodoatributos
O de setContentView(...)
associa uma Tela(.xml) a uma
classe de controle (Activity.java)

M.Sc. Márcio Palheta

27/75
Exercício 04: Inicialização de atributos
O método
findViewById(...) associa
componentes da View a
atributos da Activity

M.Sc. Márcio Palheta

28/75
Exercício 04: Inicialização de atributos

O método
setOnClickListener(...)
é usado para captura do
Clique do Botão

M.Sc. Márcio Palheta

29/75
Exercício 04: Inicialização de atributos

O método
setOnClickListener(...)
é usado para captura do
Clique do Botão

É comum utilizarmos uma
implementação anônima
da Interface OnClickListener

M.Sc. Márcio Palheta

30/75
Itens a ponderar
●

●

●

●

Precisamos inicializar a coleção de alunos e exibir os
nomes na nossa ListView
Contudo, uma ListView é um componente de tela que
pode assumir diversos formatos de visualização
Com isso, a ListView precisa da ajuda de alguém que
saiba como organizar os dados na tela
Ou seja, a ListView precisa do apoio de um Adaptador,
que saiba converter objetos Java para componetes de
Tela. Chamamos esse Objeto de apoio de Adapter.

M.Sc. Márcio Palheta

31/75
ListView's com layouts diferentes

M.Sc. Márcio Palheta

32/75
Exercício 05: Novos atributos

M.Sc. Márcio Palheta

33/75
Exercício 05: Novos atributos

Declaração de
Novos Atributos

M.Sc. Márcio Palheta

34/75
Exercício 05: Novos atributos

Objeto que converte
Listas e Vetores
em View

Declaração de
Novos Atributos

M.Sc. Márcio Palheta

35/75
Exercício 05: Novos atributos

Declaração de
Novos Atributos
Definição do Layout
que o Adapter usará

M.Sc. Márcio Palheta

36/75
Passo-a-passo
●

Agora que já:
–
–

●

associamos objetos java a componentes de tela
e criamos o adptador que sabe exibir List<Strings>

Vamos inicializar:
–
–

O adaptador (ArrayAdapter<String>); e

–
●

A coleção de nomes de Alunos(List<Strings>);
A ListView que vai exibir os nomes na tela;

No final, associaremos o adaptador à ListView
M.Sc. Márcio Palheta

37/75
Exercício 06: Inicialização da ListView

M.Sc. Márcio Palheta

38/75
Exercício 06: Inicialização da ListView

Declaração de
Novos Atributos

M.Sc. Márcio Palheta

39/75
Exercício 06: Inicialização da ListView

Declaração de
Novos Atributos

Inicializa a coleção de
nomes de Alunos

M.Sc. Márcio Palheta

40/75
Exercício 06: Inicialização da ListView

Declaração de
Novos Atributos

Inicializa o Adapter, com
a atividade contexto (this),
layout padrão(adapterLayout) e a
coleção de alunos (listaAlunos)

M.Sc. Márcio Palheta

41/75
Exercício 06: Inicialização da ListView

Declaração de
Novos Atributos

Associação do
Adapter à ListView

M.Sc. Márcio Palheta

42/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

43/75
Exercício 07: Evento de Click do botão
●

No final do método onCreate(), inclua:
Implementação do
Evento de Clique

M.Sc. Márcio Palheta

44/75
Exercício 07: Evento de Click do botão
●

No final do método onCreate(), inclua:
Implementação do
Evento de Clique

Adiciona o nome
Informado no campo
edNome à coleção

M.Sc. Márcio Palheta

45/75
Exercício 07: Evento de Click do botão
●

No final do método onCreate(), inclua:
Implementação do
Evento de Clique

Limpa o conteúdo
do campo edNome

M.Sc. Márcio Palheta

46/75
Exercício 07: Evento de Click do botão
●

No final do método onCreate(), inclua:
Implementação do
Evento de Clique

Atualiza o conteúdo
da ListView

M.Sc. Márcio Palheta

47/75
Dando um “confere” no resultado
●

Rode sua App

●

Inclua alguns nomes

●

●

Ainda poderíamos agregar
mais alguma
funcionalidade?
Que tal exibir um alerta
com o nome do aluno,
quando do clique em um
nome da lista?

M.Sc. Márcio Palheta

48/75
Evento de click da ListView
●

Assim como Button, a ListView possui o evento de click

●

Contudo, a ListView apresenta dois tipos de click:
–

–

●

Click curto, quando o usuário clica em um item da
ListView; e
Click Longo, quando o usuário clica e segura um
item da ListView ;

Vamos implementar os eventos de clique Longo e Simples
no final do método onCreate()

M.Sc. Márcio Palheta

49/75
Exercício 08: Cliques da ListView

M.Sc. Márcio Palheta

50/75
Implementação do Evento
de Clique Simples

Exercício 08: Cliques da ListView

M.Sc. Márcio Palheta

51/75
Implementação do Evento
de Clique Simples

Exercício 08: Cliques da ListView

Implementação do Evento
de Clique Longo

M.Sc. Márcio Palheta

52/75
Implementação do Evento
de Clique Simples

Exercício 08: Cliques da ListView

Implementação do Evento
de Clique Longo

Retorno == true: não executa o click simples
Retorno == false: executa o click simples

M.Sc. Márcio Palheta

53/75
Resultado dos cliques

M.Sc. Márcio Palheta

54/75
Resultado dos cliques

M.Sc. Márcio Palheta

55/75
E quando giramos o device?

M.Sc. Márcio Palheta

56/75
E quando giramos o device?
Antes do giro,
lista preenchida :-)

M.Sc. Márcio Palheta

57/75
E quando giramos o device?
Antes do giro,
lista preenchida :-)
Depois do giro,
lista vazia :-(

M.Sc. Márcio Palheta

58/75
E quando giramos o device?
Antes do giro,
lista preenchida :-)

Quando giramos o device,
o Android invoca novamente
o método onCreate() da
nossa Activity

M.Sc. Márcio Palheta

Depois do giro,
lista vazia :-(

59/75
E quando giramos o device?
Antes do giro,
lista preenchida :-)

Quando giramos o device,
o Android invoca novamente
o método onCreate() da
nossa Activity

Depois do giro,
lista vazia :-(

Com isso, todos os
componentes retornam
ao estado inicial
M.Sc. Márcio Palheta

60/75
Persistência do estado da Activity
●

●

●

Podemos armazenar o estado da app antes dela ser
pausada, parada ou destruída
Para isso, utilizamos Métodos de Callback, que são
métodos usados quando o cliente requer um retorno do
servidor, mas não quer ficar bloqueado, esperando.
onSaveInstanceState(): chamado quando o Android vai
destruir a Activity, mas sabe que vai restaurá-la depois;
–

●

Não é chamado quando usuário clica em Back

onRestoreInstanceState(): Chamado antes da Activity
destruída ser chamada pelo usuário
M.Sc. Márcio Palheta

61/75
Persistência do estado da Activity

M.Sc. Márcio Palheta

62/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

63/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

64/75
Exercício 09: Salvar estado da Activity
●

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

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
●

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

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 o método onSaveInstanceState(), inclua:

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
E agora, quando giramos o device...
Antes do giro,
lista preenchida :-)
Depois do giro,
lista continua
preenchida :-)

M.Sc. Márcio Palheta

71/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

72/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

73/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

M.Sc. Márcio Palheta

74/75
Capítulo 02: Cadastro de Alunos

Mais conteúdo relacionado

PDF
Capítulo 04 - Persistência de dados com SQLite
PDF
Capítulo 07 - Acesso a câmera e arquivos armazenados no device
PDF
Capítulo 05 - Menus de Contexto e Exclusão de Aluno
PDF
Capítulo 06 - Comunicação entre Activities e Intents Implícitas
PDF
Capítulo 03 - Formulários, menus e navegação entre telas
PDF
Capítulo 08 - desenvolvimento de layouts customizados
PDF
Capítulo 12 - Fragments
PDF
Capítulo 11 - Melhorando a usabilidade com qualifiers
Capítulo 04 - Persistência de dados com SQLite
Capítulo 07 - Acesso a câmera e arquivos armazenados no device
Capítulo 05 - Menus de Contexto e Exclusão de Aluno
Capítulo 06 - Comunicação entre Activities e Intents Implícitas
Capítulo 03 - Formulários, menus e navegação entre telas
Capítulo 08 - desenvolvimento de layouts customizados
Capítulo 12 - Fragments
Capítulo 11 - Melhorando a usabilidade com qualifiers

Mais procurados (19)

PDF
Apostila php avancado
PDF
PDF
Tutorial java orientação a objetos parte 1
DOCX
Tutorial Java: Polimorfismo
DOCX
Tutorial Java: Interface
PDF
Exercicios - Java Swing
PDF
Introdução ao JavaFX
PDF
Exercicios - Java Swing Listeners
PDF
Programação orientada a objetos em delphi
DOCX
Basico dovba excel_tutorial1
PPTX
Programação Dinâmica para Web - Aula 1
PPTX
Desenvolvimento Web com PHP - Aula 3
PDF
Construindo aplicações com netbeans
ODP
Produtividade com Eclipse IDE
PPTX
Metodologia e Linguagem de Programação Avançada - Aula 1
PPTX
Desenvolvimento Web com PHP - Aula 1
PDF
PDF
Java generics-basics
PPTX
Desenvolvimento Web com PHP - Aula 2
Apostila php avancado
Tutorial java orientação a objetos parte 1
Tutorial Java: Polimorfismo
Tutorial Java: Interface
Exercicios - Java Swing
Introdução ao JavaFX
Exercicios - Java Swing Listeners
Programação orientada a objetos em delphi
Basico dovba excel_tutorial1
Programação Dinâmica para Web - Aula 1
Desenvolvimento Web com PHP - Aula 3
Construindo aplicações com netbeans
Produtividade com Eclipse IDE
Metodologia e Linguagem de Programação Avançada - Aula 1
Desenvolvimento Web com PHP - Aula 1
Java generics-basics
Desenvolvimento Web com PHP - Aula 2
Anúncio

Semelhante a Capítulo 02 - Cadastro de Alunos e Decisões de Projeto (20)

PDF
Aula android 04
PPTX
Aula03 android layouts_views
ODP
Android User Interface
PPTX
Aula05 - Android - Persistência
PDF
Minicurso de Android Básico I - Dia 2
PDF
Android bootcamp 06-01-2012 Part 1
PPTX
Computação Móvel 2012.2 - Android
PDF
Documentao Projeto Android - Intent
PDF
Apostila Android
PDF
Data Binding Para Vinculo de Dados na UI Android
PPTX
Aula 7.0 android 02 - primeiro programa calculadora
PDF
Aula 15 e 16 - Navegação - Activities e Fragments.pptx.pdf
PDF
03_aperfeicoando a interface.pdf
PPTX
Introdução ao desenvolvimento de apps para Android - Dia 2/2
PDF
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3
PDF
Aula 1 view model livedata e databinding.pptx
PDF
Criando uma Agenda simples com NetBeans
PDF
Criando uma agenda simples com NetBeans
DOC
Como criar interfaces gráficas com android
PPTX
Android 02 - Recycler View Adapter
Aula android 04
Aula03 android layouts_views
Android User Interface
Aula05 - Android - Persistência
Minicurso de Android Básico I - Dia 2
Android bootcamp 06-01-2012 Part 1
Computação Móvel 2012.2 - Android
Documentao Projeto Android - Intent
Apostila Android
Data Binding Para Vinculo de Dados na UI Android
Aula 7.0 android 02 - primeiro programa calculadora
Aula 15 e 16 - Navegação - Activities e Fragments.pptx.pdf
03_aperfeicoando a interface.pdf
Introdução ao desenvolvimento de apps para Android - Dia 2/2
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3
Aula 1 view model livedata e databinding.pptx
Criando uma Agenda simples com NetBeans
Criando uma agenda simples com NetBeans
Como criar interfaces gráficas com android
Android 02 - Recycler View Adapter
Anúncio

Mais de Marcio Palheta (8)

PDF
Capítulo 10 - Sincronização de dados usando JSON
PDF
Capítulo 09 - Serviços em Background
PDF
Capítulo 01 - Fundamentos de Android e o HelloWorld
PDF
Implementação de Sockets em JAVA
PDF
Trabalhando com Threads em JAVA
PDF
Introdução ao Python
PDF
Weka em aplicações java
PPTX
Palestra ministrada na Feira Norte do Estudante 2012
Capítulo 10 - Sincronização de dados usando JSON
Capítulo 09 - Serviços em Background
Capítulo 01 - Fundamentos de Android e o HelloWorld
Implementação de Sockets em JAVA
Trabalhando com Threads em JAVA
Introdução ao Python
Weka em aplicações java
Palestra ministrada na Feira Norte do Estudante 2012

Último (19)

PPTX
Analise Estatica de Compiladores para criar uma nova LP
PDF
Aula 9 - Funções 202yttvrcrg5-1.pptx.pdf
PDF
ASCENSÃO E QUEDA DO SOFTWARE LIVRE NO ESTADO BRASILEIRO
PPTX
Aula 7 - Listas em Python (Introdução à Ciencia da Computação)
PPTX
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
PPTX
ccursoammaiacursoammaiacursoammaia123456
PPTX
Tipos de servidor em redes de computador.pptx
PDF
Jira Software projetos completos com scrum
PDF
Visão geral da SAP, SAP01 Col18, Introdução sistema SAP,
PPTX
3b - Bradesco Lean Agile Training Plan - Ritos Operacionais (1).pptx
PDF
Processos no SAP Extended Warehouse Management, EWM100 Col26
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PDF
Metodologia Scrumban-XP - Um Guia Rápido (MrSomebody19).pdf
PPT
Aula de Engenharia de Software principais caracteristicas
PDF
Customizing básico em SAP Extended Warehouse Management, EWM110 Col26
PDF
Banco de Dados 2atualização de Banco de d
PDF
Processamento da remessa no SAP ERP, SCM610 Col15
PPT
Conceitos básicos de Redes Neurais Artificiais
PDF
SEMINÁRIO DE IHC - A interface Homem-Máquina
Analise Estatica de Compiladores para criar uma nova LP
Aula 9 - Funções 202yttvrcrg5-1.pptx.pdf
ASCENSÃO E QUEDA DO SOFTWARE LIVRE NO ESTADO BRASILEIRO
Aula 7 - Listas em Python (Introdução à Ciencia da Computação)
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
ccursoammaiacursoammaiacursoammaia123456
Tipos de servidor em redes de computador.pptx
Jira Software projetos completos com scrum
Visão geral da SAP, SAP01 Col18, Introdução sistema SAP,
3b - Bradesco Lean Agile Training Plan - Ritos Operacionais (1).pptx
Processos no SAP Extended Warehouse Management, EWM100 Col26
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Metodologia Scrumban-XP - Um Guia Rápido (MrSomebody19).pdf
Aula de Engenharia de Software principais caracteristicas
Customizing básico em SAP Extended Warehouse Management, EWM110 Col26
Banco de Dados 2atualização de Banco de d
Processamento da remessa no SAP ERP, SCM610 Col15
Conceitos básicos de Redes Neurais Artificiais
SEMINÁRIO DE IHC - A interface Homem-Máquina

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

  • 2. Instrutor ● Programador desde 2000 ● Aluno de doutorado ● ● ● ● Mestre em informática pelo ICOMP/UFAM Especialista em aplicações WEB – FUCAPI marcio.palheta@gmail.com sites.google.com/site/marcio palheta M.Sc. Márcio Palheta 2/75
  • 3. Agenda ● Definições de projeto – Registro Acadêmico ● Pensando em Casos de Uso ● Criação de uma nova App ● Criação da Tela de Listagem de Alunos ● Trabalhando com ListView, List e Adapters ● Integração entre componentes de tela e controladores ● Alertas baseados no componente Toast ● Evento de clique simples em uma lista ● Evento de clique longo M.Sc. Márcio Palheta 3/75
  • 4. Definições de Projeto ● ● Como estratégia para apresentação do conteúdo deste curso, realizaremos a implementação de uma app para Manipulação de Dados de Alunos Em linhas gerais, nossa app consiste em: – Manter dados de alunos; – Entrar em contato com alunos; – Trocar dados com um servidor WEB; E – Compartilhar conteúdo em mídias ; M.Sc. Márcio Palheta 4/75
  • 5. Funcionalidades da nossa App M.Sc. Márcio Palheta 5/75
  • 6. Funcionalidades da nossa App M.Sc. Márcio Palheta 6/75
  • 7. Começando pelo cadastro ● ● ● ● ● Neste requisito da nossa App, precisamos de: Uma tela para listar Alunos E outra para cadastrar ou alterar dados de Alunos A exclusão deve ocorrer com a seleção de um aluno na tela de listagem Vamos começar criando uma nova Android Application M.Sc. Márcio Palheta 7/75
  • 8. Exercício 01: Nova Android Application M.Sc. Márcio Palheta 8/75
  • 9. Exercício 01: Nova Android Application ● Clique em Next, até chegar à última tela: M.Sc. Márcio Palheta 9/75
  • 10. Estrutura de pastas da App M.Sc. Márcio Palheta 10/75
  • 11. Exercício 02: Tela de listagem ● Agora vamos definir a Tela de listagem de alunos ● Nossa tela precisa dos seguintes componentes: – Lista: apresentação dos nomes dos alunos. O componente com essa função é o ListView, que recebe uma coleção de Objetos e lista seus dados – Campo de texto: onde o usuário informa o nome de um aluno que deseja incluir na listagem. Usaremos o EditText – Botão: para adicionar o nome do aluno à lista. Usaremos o componente Button. M.Sc. Márcio Palheta 11/75
  • 12. Exercício 02: Tela de listagem ● Altere o arquivo: /res/values/strings.xml M.Sc. Márcio Palheta 12/75
  • 13. Exercício 02: Tela de listagem ● Altere o arquivo: /res/values/strings.xml Strings usadas na Tela de Listagem M.Sc. Márcio Palheta 13/75
  • 14. Exercício 02: Tela de listagem ● Altere: /res/layout/listaalunoslayout.xml M.Sc. Márcio Palheta 14/75
  • 15. Exercício 02: Tela de listagem ● Altere: /res/layout/listaalunoslayout.xml Campo de Texto id=edNomeListagem M.Sc. Márcio Palheta 15/75
  • 16. Exercício 02: Tela de listagem ● Altere: /res/layout/listaalunoslayout.xml Componente Botão id=btAddListagem M.Sc. Márcio Palheta 16/75
  • 17. Exercício 02: Tela de listagem ● Altere: /res/layout/listaalunoslayout.xml Componente Lista para exibir Alunos id=lvListagem M.Sc. Márcio Palheta 17/75
  • 18. Exercício 02: Tela de listagem ● ● ● ● Execute sua App Repare que os os componentes EditText e Button estão visíveis No entanto, a ListView não aparece Isso ocorre porque nossa lista ainda está vazia M.Sc. Márcio Palheta 18/75
  • 19. Exercício 02: Tela de listagem ● ● ● ● Campo de Texto e Botão estão Execute sua App disponíveis Repare que os os componentes EditText e Button estão visíveis No entanto, a ListView não aparece Isso ocorre porque nossa lista ainda está vazia M.Sc. Márcio Palheta 19/75
  • 20. Exercício 02: Tela de listagem ● ● ● ● Campo de Texto e Botão estão Execute sua App disponíveis Repare que os os componentes EditText e Button estão visíveis Nossa Lista de alunos entanto, a está vazia ainda ListView No não aparece Isso ocorre porque nossa lista ainda está vazia M.Sc. Márcio Palheta 20/75
  • 21. Controladores e as regras de negócio ● ● ● As telas (xml) que criamos em Android estão associadas a classes Java (controladores), responsáveis pela implementação de suas regras de negócio A nossa tela listaalunoslayou.xml é controlada pela classe ListaAlunosActivity.java A classe de controle captura os eventos e componentes da tela e implementa as regrasde negócio necessárias às funcionalidades da nossa App M.Sc. Márcio Palheta 21/75
  • 22. Exercício 03: Atributos e coleção M.Sc. Márcio Palheta 22/75
  • 23. Exercício 03: Atributos e coleção Componente de Tela, acessados na classe de controle M.Sc. Márcio Palheta 23/75
  • 24. Exercício 03: Atributos e coleção Objeto que guarda a coleção de Alunos M.Sc. Márcio Palheta 24/75
  • 25. Exercício 03: Atributos e coleção Método que pode ser usado para inicializar os atributos M.Sc. Márcio Palheta 25/75
  • 26. Exercício 04: Inicialização de atributos M.Sc. Márcio Palheta 26/75
  • 27. Exercício 04: Inicialização métodoatributos O de setContentView(...) associa uma Tela(.xml) a uma classe de controle (Activity.java) M.Sc. Márcio Palheta 27/75
  • 28. Exercício 04: Inicialização de atributos O método findViewById(...) associa componentes da View a atributos da Activity M.Sc. Márcio Palheta 28/75
  • 29. Exercício 04: Inicialização de atributos O método setOnClickListener(...) é usado para captura do Clique do Botão M.Sc. Márcio Palheta 29/75
  • 30. Exercício 04: Inicialização de atributos O método setOnClickListener(...) é usado para captura do Clique do Botão É comum utilizarmos uma implementação anônima da Interface OnClickListener M.Sc. Márcio Palheta 30/75
  • 31. Itens a ponderar ● ● ● ● Precisamos inicializar a coleção de alunos e exibir os nomes na nossa ListView Contudo, uma ListView é um componente de tela que pode assumir diversos formatos de visualização Com isso, a ListView precisa da ajuda de alguém que saiba como organizar os dados na tela Ou seja, a ListView precisa do apoio de um Adaptador, que saiba converter objetos Java para componetes de Tela. Chamamos esse Objeto de apoio de Adapter. M.Sc. Márcio Palheta 31/75
  • 32. ListView's com layouts diferentes M.Sc. Márcio Palheta 32/75
  • 33. Exercício 05: Novos atributos M.Sc. Márcio Palheta 33/75
  • 34. Exercício 05: Novos atributos Declaração de Novos Atributos M.Sc. Márcio Palheta 34/75
  • 35. Exercício 05: Novos atributos Objeto que converte Listas e Vetores em View Declaração de Novos Atributos M.Sc. Márcio Palheta 35/75
  • 36. Exercício 05: Novos atributos Declaração de Novos Atributos Definição do Layout que o Adapter usará M.Sc. Márcio Palheta 36/75
  • 37. Passo-a-passo ● Agora que já: – – ● associamos objetos java a componentes de tela e criamos o adptador que sabe exibir List<Strings> Vamos inicializar: – – O adaptador (ArrayAdapter<String>); e – ● A coleção de nomes de Alunos(List<Strings>); A ListView que vai exibir os nomes na tela; No final, associaremos o adaptador à ListView M.Sc. Márcio Palheta 37/75
  • 38. Exercício 06: Inicialização da ListView M.Sc. Márcio Palheta 38/75
  • 39. Exercício 06: Inicialização da ListView Declaração de Novos Atributos M.Sc. Márcio Palheta 39/75
  • 40. Exercício 06: Inicialização da ListView Declaração de Novos Atributos Inicializa a coleção de nomes de Alunos M.Sc. Márcio Palheta 40/75
  • 41. Exercício 06: Inicialização da ListView Declaração de Novos Atributos Inicializa o Adapter, com a atividade contexto (this), layout padrão(adapterLayout) e a coleção de alunos (listaAlunos) M.Sc. Márcio Palheta 41/75
  • 42. Exercício 06: Inicialização da ListView Declaração de Novos Atributos Associação do Adapter à ListView M.Sc. Márcio Palheta 42/75
  • 43. Passo-a-passo ● Agora, podemos atualizar o evento de clique do botão Adicionar Aluno; ● Maaaas, o que devemos fazer quando do clique? ● Precisamos: – Adicionar o nome digitado no campo edNome à coleção listaAlunos; – Limpar o conteúdo do campo edNome; e – Atualizar o conteúdo da ListView M.Sc. Márcio Palheta 43/75
  • 44. Exercício 07: Evento de Click do botão ● No final do método onCreate(), inclua: Implementação do Evento de Clique M.Sc. Márcio Palheta 44/75
  • 45. Exercício 07: Evento de Click do botão ● No final do método onCreate(), inclua: Implementação do Evento de Clique Adiciona o nome Informado no campo edNome à coleção M.Sc. Márcio Palheta 45/75
  • 46. Exercício 07: Evento de Click do botão ● No final do método onCreate(), inclua: Implementação do Evento de Clique Limpa o conteúdo do campo edNome M.Sc. Márcio Palheta 46/75
  • 47. Exercício 07: Evento de Click do botão ● No final do método onCreate(), inclua: Implementação do Evento de Clique Atualiza o conteúdo da ListView M.Sc. Márcio Palheta 47/75
  • 48. Dando um “confere” no resultado ● Rode sua App ● Inclua alguns nomes ● ● Ainda poderíamos agregar mais alguma funcionalidade? Que tal exibir um alerta com o nome do aluno, quando do clique em um nome da lista? M.Sc. Márcio Palheta 48/75
  • 49. Evento de click da ListView ● Assim como Button, a ListView possui o evento de click ● Contudo, a ListView apresenta dois tipos de click: – – ● Click curto, quando o usuário clica em um item da ListView; e Click Longo, quando o usuário clica e segura um item da ListView ; Vamos implementar os eventos de clique Longo e Simples no final do método onCreate() M.Sc. Márcio Palheta 49/75
  • 50. Exercício 08: Cliques da ListView M.Sc. Márcio Palheta 50/75
  • 51. Implementação do Evento de Clique Simples Exercício 08: Cliques da ListView M.Sc. Márcio Palheta 51/75
  • 52. Implementação do Evento de Clique Simples Exercício 08: Cliques da ListView Implementação do Evento de Clique Longo M.Sc. Márcio Palheta 52/75
  • 53. Implementação do Evento de Clique Simples Exercício 08: Cliques da ListView Implementação do Evento de Clique Longo Retorno == true: não executa o click simples Retorno == false: executa o click simples M.Sc. Márcio Palheta 53/75
  • 54. Resultado dos cliques M.Sc. Márcio Palheta 54/75
  • 55. Resultado dos cliques M.Sc. Márcio Palheta 55/75
  • 56. E quando giramos o device? M.Sc. Márcio Palheta 56/75
  • 57. E quando giramos o device? Antes do giro, lista preenchida :-) M.Sc. Márcio Palheta 57/75
  • 58. E quando giramos o device? Antes do giro, lista preenchida :-) Depois do giro, lista vazia :-( M.Sc. Márcio Palheta 58/75
  • 59. E quando giramos o device? Antes do giro, lista preenchida :-) Quando giramos o device, o Android invoca novamente o método onCreate() da nossa Activity M.Sc. Márcio Palheta Depois do giro, lista vazia :-( 59/75
  • 60. E quando giramos o device? Antes do giro, lista preenchida :-) Quando giramos o device, o Android invoca novamente o método onCreate() da nossa Activity Depois do giro, lista vazia :-( Com isso, todos os componentes retornam ao estado inicial M.Sc. Márcio Palheta 60/75
  • 61. Persistência do estado da Activity ● ● ● Podemos armazenar o estado da app antes dela ser pausada, parada ou destruída Para isso, utilizamos Métodos de Callback, que são métodos usados quando o cliente requer um retorno do servidor, mas não quer ficar bloqueado, esperando. onSaveInstanceState(): chamado quando o Android vai destruir a Activity, mas sabe que vai restaurá-la depois; – ● Não é chamado quando usuário clica em Back onRestoreInstanceState(): Chamado antes da Activity destruída ser chamada pelo usuário M.Sc. Márcio Palheta 61/75
  • 62. Persistência do estado da Activity M.Sc. Márcio Palheta 62/75
  • 63. Persistência do estado da Activity ● ● ● ● Para salvar o estado da Activity, podemos usar o objeto Bundle, gerenciado pelo Android O Bundle empacota um java.util.Map O Objeto Bundle é passado pelo Android aos métodos onCreate(), onSaveInstanceState() e onRestoreInstanceState() Podemos utilizar o Map empacotado no Bundle para armazenar o estado da nossa App M.Sc. Márcio Palheta 63/75
  • 64. Passo-a-passo ● Na classe ListaAlunosActivity, defina duas constantes: – – ● ● String TAG = "CADASTRO_ALUNO" – Usada para registro de mensagens de LOG no Logcat String ALUNOS_KEY = "LISTA" – Usada como Chave para o Map do Objeto Bundle; Implemente os métodos onSaveInstanceState() e onRestoreInstanceState() Atualize o método onCreate(), para tentar recuperar a chave ALUNOS_KEY do Bundle M.Sc. Márcio Palheta 64/75
  • 65. Exercício 09: Salvar estado da Activity ● No início da Activity, vamos incluir as novas constantes: M.Sc. Márcio Palheta 65/75
  • 66. Exercício 09: Salvar estado da Activity ● No início da Activity, vamos incluir as novas constantes: M.Sc. Márcio Palheta 66/75
  • 67. Exercício 09: Salvar estado da Activity ● Após a definição de atributos, inclua o novo método: M.Sc. Márcio Palheta 67/75
  • 68. Exercício 09: Salvar estado da Activity ● Após a definição de atributos, inclua o novo método: M.Sc. Márcio Palheta 68/75
  • 69. Exercício 09: Salvar estado da Activity ● Após o método onSaveInstanceState(), inclua: M.Sc. Márcio Palheta 69/75
  • 70. Exercício 09: Salvar estado da Activity ● Após o método onSaveInstanceState(), inclua: M.Sc. Márcio Palheta 70/75
  • 71. E agora, quando giramos o device... Antes do giro, lista preenchida :-) Depois do giro, lista continua preenchida :-) M.Sc. Márcio Palheta 71/75
  • 72. Resultado exibido no LogCat ● Pelas mensagens de log, verificamos a lista de alunos sendo salva e recuperada do objeto Bundle M.Sc. Márcio Palheta 72/75
  • 73. O que vem a seguir? ● Tela de Dados do Aluno ● Persistência com SQLite ● Intents ● Câmera e arquivos ● LayoutInflater ● Serviços de background ● Integração via JSON M.Sc. Márcio Palheta 73/75
  • 74. 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 M.Sc. Márcio Palheta 74/75