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 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 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 ; 4/75
Funcionalidades da nossa App 5/75
Funcionalidades da nossa App 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 7/75
Exercício 01: Nova Android Application 8/75
Exercício 01: Nova Android Application Clique em Next, até chegar à última tela: 9/75
Estrutura de pastas da App 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. 11/75
Exercício 02: Tela de listagem Altere o arquivo: /res/values/strings.xml 12/75
Exercício 02: Tela de listagem Altere o arquivo: /res/values/strings.xml Strings usadas na Tela de Listagem 13/75
Exercício 02: Tela de listagem Altere: /res/layout/listaalunoslayout.xml 14/75
Exercício 02: Tela de listagem Altere: /res/layout/listaalunoslayout.xml Campo de Texto id=ednomelistagem 15/75
Exercício 02: Tela de listagem Altere: /res/layout/listaalunoslayout.xml Componente Botão id=btaddlistagem 16/75
Exercício 02: Tela de listagem Altere: /res/layout/listaalunoslayout.xml Componente Lista para exibir Alunos id=lvlistagem 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 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 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á ListView ainda vazia No não aparece Isso ocorre porque nossa lista ainda está vazia 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 21/75
Exercício 03: Atributos e coleção 22/75
Exercício 03: Atributos e coleção Componente de Tela, acessados na classe de controle 23/75
Exercício 03: Atributos e coleção Objeto que guarda a coleção de Alunos 24/75
Exercício 03: Atributos e coleção Método que pode ser usado para inicializar os atributos 25/75
Exercício 04: Inicialização de atributos 26/75
Exercício 04: InicializaçãoO método de atributos setcontentview(...) associa uma Tela(.xml) a uma classe de controle (Activity.java) 27/75
Exercício 04: Inicialização de atributos O método findviewbyid(...) associa componentes da View a atributos da Activity 28/75
Exercício 04: Inicialização de atributos O método setonclicklistener(...) é usado para captura do Clique do Botão 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 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. 31/75
ListView's com layouts diferentes 32/75
Exercício 05: Novos atributos 33/75
Exercício 05: Novos atributos Declaração de Novos Atributos 34/75
Exercício 05: Novos atributos Objeto que converte Listas e Vetores em View Declaração de Novos Atributos 35/75
Exercício 05: Novos atributos Declaração de Novos Atributos Definição do Layout que o Adapter usará 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: 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 37/75
Exercício 06: Inicialização da ListView 38/75
Exercício 06: Inicialização da ListView Declaração de Novos Atributos 39/75
Exercício 06: Inicialização da ListView Declaração de Novos Atributos Inicializa a coleção de nomes de Alunos 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) 41/75
Exercício 06: Inicialização da ListView Declaração de Novos Atributos Associação do Adapter à ListView 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 43/75
Exercício 07: Evento de Click do botão No final do método oncreate(), inclua: Implementação do Evento de Clique 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 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 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 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? 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() 49/75
Exercício 08: Cliques da ListView 50/75
Implementação do Evento de Clique Simples Exercício 08: Cliques da ListView 51/75
Implementação do Evento de Clique Simples Exercício 08: Cliques da ListView Implementação do Evento de Clique Longo 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 53/75
Resultado dos cliques 54/75
Resultado dos cliques 55/75
E quando giramos o device? 56/75
E quando giramos o device? Antes do giro, lista preenchida :-) 57/75
E quando giramos o device? Antes do giro, lista preenchida :-) Depois do giro, lista vazia :-( 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 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 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 61/75
Persistência do estado da Activity 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 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 64/75
Exercício 09: Salvar estado da Activity No início da Activity, vamos incluir as novas constantes: 65/75
Exercício 09: Salvar estado da Activity No início da Activity, vamos incluir as novas constantes: 66/75
Exercício 09: Salvar estado da Activity Após a definição de atributos, inclua o novo método: 67/75
Exercício 09: Salvar estado da Activity Após a definição de atributos, inclua o novo método: 68/75
Exercício 09: Salvar estado da Activity Após o método onsaveinstancestate(), inclua: 69/75
Exercício 09: Salvar estado da Activity Após o método onsaveinstancestate(), inclua: 70/75
E agora, quando giramos o device... Antes do giro, lista preenchida :-) Depois do giro, lista continua preenchida :-) 71/75
Resultado exibido no LogCat Pelas mensagens de log, verificamos a lista de alunos sendo salva e recuperada do objeto Bundle 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 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 74/75
Capítulo 02: Cadastro de Alunos