Aula 2 Transição entre activities É feita usando o método startActivity, passando como parâmetro uma variável da classe Intent, correspondente à activity desejada O intent será criado com o contexto da aplicação e a classe da activity desejada Exemplo: Intent i = new Intent(getApplicationContext(), SecondScreen.class); startActivity(i); Transição entre activities Podem ser levados parâmetros, usando o método putExtra, passando uma chave e o valor desejado Exemplo: i.putExtra("key", "value"); Para recuperar parâmetros de outra activity, é usado o método getStringExtra Exemplo: Intent i = getIntent(); i.getStringExtra("key"); Exemplo Vamos usar um botão para mudar entre activities, passando um nome digitado num EditText na primeira activity para uma saudação na segunda, que conterá um botão para voltar à primeira Menu É um componente que fornece opções, no canto direito superior da activity É configurado por arquivos xml, localizados na pasta menu É criado pelo método onCreateOptionsMenu(Menu menu) Seus eventos são gerenciados no método onOptionsItemSelected(MenuItem item) Exemplo Vamos modificar nossa aplicação, para que a transição seja feita com menus Membros estáticos São atributos e métodos que podem ser chamados em uma classe mesmo que não tenha sido criada uma instância desta classe Conjunto de instruções de um programa que pode ser chamado por um nome, sendo ideal para evitar a repetição de código Exemplo public class Utilitaria { public static int soma(int a,int b) { return a + b; } } O método estático e inteiro soma() recebe como parâmetros dois inteiros, a e b, os soma e retorna Exercícios Acresente à classe Utilitaria os métodos: double media (double a, double media), que retorne a média aritmética entre a e b int somatorio(int n), que retorne o resultado do somatório 1 + 2 + 3 + ... + n int fatorial(int n), que retorne o fatorial de n Classes e objetos Classe: representa um molde, a partir do qual podem ser instanciados objetos com características afins. Uma classe define o comportamento dos objetos através de seus métodos (comportamento), e quais estados ele é capaz de manter através de seus atributos (estado) Objeto / instância de uma classe: um objeto é capaz de armazenar estados através de seus atributos e reagir a mensagens enviadas a ele, assim como se relacionar e enviar mensagens a outros objetos Estado e comportamento Atributos: representam o estado de um objeto. Basicamente a estrutura de dados que vai representar a classe. Por exemplo: Funcionário: nome, endereço, telefone, CPF Métodos: definem o comportamento dos objetos. Por exemplo, a classe Circulo pode implementar o método area(), que retorne sua área Getters e Setters Em linguagens orientadas a objetos, por padrão, atributos são definidos como privados (private), o que tira o acesso direto a eles por classes externas Para conceder acesso de visualização do estado de um objeto, são usados os getters, métodos get(). Por exemplo: para recuperar o cpf de um funcionário, será usado o método getCpf() Para modificar o estado de um objeto, são usados os métodos setters, métodos set(). Por exemplo, para modificar o salário de um funcionário, será usado o método setSalario() Exemplo public class Pessoa { private String nome; private int idade; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } } A classe Pessoa possui dois atributos, nome e idade, que definem seu estado. O método getNome() recupera o nome do objeto, e o método setNome() permite modificar o nome Instanciação de objetos Para declarar um objeto, usa-se a notação padrão, ou seja, o tipo seguido de seu identificador. Por exemplo, para declarar um objeto chamado p do tipo Pessoa: Pessoa p; Para instanciar um objeto, é usada a palavra reservada new. Por exemplo, para instanciar um objeto do tipo Pessoa: Pessoa p = new Pessoa(); Exemplo Vamos instanciar um objeto da classe Pessoa, modificar seu nome e recuperá-lo para exibição num TextView Exercício Acrescente à classe Pessoa os métodos getIdade() e setIdade() Modifique a aplicação, para que ela atribua ao objeto p um nome e uma idade entrados pelo teclado, e exiba seus dados na tela Construtor Permitem definir o estado inicial do objeto no momento de sua instanciação Não têm tipo de retorno Seu identificador é o mesmo de sua classe Exemplo public class Pessoa { private String nome; private int idade; public Pessoa(String nome, int idade) { this.nome = nome; this.idade = idade; } } Exemplo Vamos instanciar um objeto da classe Pessoa, iniciar seus atributos com o construtor, e recuperá-los para exibição em TextViews Listas dinâmicas São estruturas de dados dinâmicas, ou seja, não têm sua capacidade definida na instanciação São implementadas pelas classes ArrayList e LinkedList Sintaxe Instanciação ArrayList identificador = new ArrayList(); Inclusão de itens na lista identificador.add(item); Recuperação de itens identificador.get(índice); Tamanho da lista Identificador.size(); Exemplo Vamos instanciar uma ArrayList, preenchê-la com os valores 3, 4.5 e “Java” e exibí-los num TextView Type Casting Entretanto, se quisermos atribuir algum dos itens da lista a uma variável, não poderemos fazer simplesmente: int x = al.get(0); Pois isso dará incompatibilidade de tipos (int à esquerda, Object à direita) Para resolver isso, usamos type casting, ou coerção de tipo: int x = (int)al.get(0); Generics Porém, essa solução abre a possibilidade de erros em tempo de execução, em caso de casting errado Se quisermos definir no momento da declaração o tipo dos dados a ser inseridos na lista, usamos generics: ArrayList<tipo> identificador = new ArrayList<>(); Wrappers Entretanto, não podemos definir o tipo como um tipo primitivo (int, double, boolean, etc) Por isso, se quisermos declarar nossa lista com tipos como esses, usamos as classes wrappers (empacotadoras): Integer para int, Double para double, Boolean para boolean, etc) Exemplo Vamos instanciar uma ArrayList de inteiros, preenchê-la com os valores 1, 2 e 3 e exibí-los num TextView Exercício Implemente as classes: SomaLista, que preencha uma lista com os inteiros de 1 a 1000 e exiba na tela o somatório de seus itens MediaTurma, que leia as notas de n alunos (n entrado pelo usuário), e exiba a nota média da turma ListView ListView é um componente que mostra uma lista de itens Os itens da lista são automaticamente inseridos usando um adapter, implementado pela classe ArrayAdapter, a partir de um fonte de dados, como uma lista ou uma consulta a um BD O adapter é contruindo usando o contexto da aplicação, o tipo de listView (em nosso caso, android.R.layout.simple_list_item_1) e a fonte de dados a preenchê-la Exemplo Vamos instanciar uma ArrayList de Strings, populá-la com valores arbitrários, e preencher com ela um ListView Exercício Implemente a aplicação Listagem, com a classe: NomeController, com o atributo estático alunos (ArrayList<String>); o método estático void adicionar (String nome) e o método estático getNomes(); Duas activities: MainActivity, com um EditText; um botão para chamar o método adicionar da classe NomeController, passando o nome digitado no EditText; e um item de menu para a transição para a segunda Activity ListaActivity, que exiba um ListView com os nomes adicionados na primeira activity; e um item de menu para voltar a MainActivity Exercício Implemente a aplicação Academica, com as classes: Aluno, com os atributos nome (String), telefone (String) e email (String); getters, setters e construtor AlunoController, com o atributo estático alunos (ArrayList<Aluno>), o método estático void adicionar(Aluno a) e o método estático getAlunos() Exercício (continuação) Três activities: MainActivity, com um EditText; um botão para chamar o método adicionar da classe NomeController, passando um aluno com os dados digitados nos EditTexts; e um item de menu para a transição para a segunda Activity ListaActivity, que exiba um ListView com os nomes adicionados na primeira activity; e um item de menu para voltar a MainActivity; um clique num item da lista chamará a terceira activity DadosActivity, que exiba em TextViews os dados do aluno selecionado em ListaActivity