Upload
truonglien
View
224
Download
4
Embed Size (px)
Citation preview
M.Sc. Márcio Palheta 2/75
Instrutor
● Programador desde 2000
● Aluno de doutorado
● Mestre em informática pelo ICOMP/UFAM
● Especialista em aplicações WEB – FUCAPI
● sites.google.com/site/marciopalheta
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 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 9/75
Exercício 01: Nova Android Application
● Clique em Next, até chegar à última tela:
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 23/75
Exercício 03: Atributos e coleção
Componente de Tela, acessados na classe
de controle
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 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 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 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 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 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 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