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