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

6,986 views
6,993 views

Published on

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


Published in: Technology
3 Comments
15 Likes
Statistics
Notes
No Downloads
Views
Total views
6,986
On SlideShare
0
From Embeds
0
Number of Embeds
37
Actions
Shares
0
Downloads
1,015
Comments
3
Likes
15
Embeds 0
No embeds

No notes for slide

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

  1. 1. Capítulo 02: Cadastro de Alunos
  2. 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. 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. 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. 5. Funcionalidades da nossa App M.Sc. Márcio Palheta 5/75
  6. 6. Funcionalidades da nossa App M.Sc. Márcio Palheta 6/75
  7. 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. 8. Exercício 01: Nova Android Application M.Sc. Márcio Palheta 8/75
  9. 9. Exercício 01: Nova Android Application ● Clique em Next, até chegar à última tela: M.Sc. Márcio Palheta 9/75
  10. 10. Estrutura de pastas da App M.Sc. Márcio Palheta 10/75
  11. 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. 12. Exercício 02: Tela de listagem ● Altere o arquivo: /res/values/strings.xml M.Sc. Márcio Palheta 12/75
  13. 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. 14. Exercício 02: Tela de listagem ● Altere: /res/layout/listaalunoslayout.xml M.Sc. Márcio Palheta 14/75
  15. 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. 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. 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. 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. 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. 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. 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. 22. Exercício 03: Atributos e coleção M.Sc. Márcio Palheta 22/75
  23. 23. Exercício 03: Atributos e coleção Componente de Tela, acessados na classe de controle M.Sc. Márcio Palheta 23/75
  24. 24. Exercício 03: Atributos e coleção Objeto que guarda a coleção de Alunos M.Sc. Márcio Palheta 24/75
  25. 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. 26. Exercício 04: Inicialização de atributos M.Sc. Márcio Palheta 26/75
  27. 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. 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. 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. 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. 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. 32. ListView's com layouts diferentes M.Sc. Márcio Palheta 32/75
  33. 33. Exercício 05: Novos atributos M.Sc. Márcio Palheta 33/75
  34. 34. Exercício 05: Novos atributos Declaração de Novos Atributos M.Sc. Márcio Palheta 34/75
  35. 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. 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. 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. 38. Exercício 06: Inicialização da ListView M.Sc. Márcio Palheta 38/75
  39. 39. Exercício 06: Inicialização da ListView Declaração de Novos Atributos M.Sc. Márcio Palheta 39/75
  40. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 50. Exercício 08: Cliques da ListView M.Sc. Márcio Palheta 50/75
  51. 51. Implementação do Evento de Clique Simples Exercício 08: Cliques da ListView M.Sc. Márcio Palheta 51/75
  52. 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. 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. 54. Resultado dos cliques M.Sc. Márcio Palheta 54/75
  55. 55. Resultado dos cliques M.Sc. Márcio Palheta 55/75
  56. 56. E quando giramos o device? M.Sc. Márcio Palheta 56/75
  57. 57. E quando giramos o device? Antes do giro, lista preenchida :-) M.Sc. Márcio Palheta 57/75
  58. 58. E quando giramos o device? Antes do giro, lista preenchida :-) Depois do giro, lista vazia :-( M.Sc. Márcio Palheta 58/75
  59. 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. 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. 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. 62. Persistência do estado da Activity M.Sc. Márcio Palheta 62/75
  63. 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. 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. 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. 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. 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. 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. 69. Exercício 09: Salvar estado da Activity ● Após o método onSaveInstanceState(), inclua: M.Sc. Márcio Palheta 69/75
  70. 70. Exercício 09: Salvar estado da Activity ● Após o método onSaveInstanceState(), inclua: M.Sc. Márcio Palheta 70/75
  71. 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. 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. 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. 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
  75. 75. Capítulo 02: Cadastro de Alunos

×