Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

7,742 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
  • Senhor Marcio Palheta se possível me esclareça uma dúvida, estou usando a última versão do Android Studio, porque meus ícones não são visíveis na Activity ao lado do nome do programa.obrigado(claudioglopes1@gmail.com)
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Boa Tarde, excelente trabalho, parabéns. Apesar de já ter se passado alguns anos tenho conseguido acompanhar muito bem as suas explicações, sem dúvida alguma o melhor curso que encontrei na net, obrigado.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Excelente material mais uma vez, Palheta!
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

×