Bem-vindo ao curso de Introdução ao Desenvolvimento de aplicativos Androids.
Agora que você tem uma interface gráfica e uma classe que representa
item da lista de compras, será necessário escrever o comportamento da activity.
O seu aplicativo possui dois elementos que irão disparar gatilhos.
O botão e a Listview.
Quando o usuário clicar no botão,
gatilho será disparado para adicionar novo item na Listview.
Quando o usuário der clique longo na Listview,
gatilho será disparado para remover o item clicado.
Os outros elementos não irão disparar gatilhos,
mas você precisará de uma referência a cada deles,
obtida com o método findViewByid, para receber o que o usuário inseriu.
Nesta video aula, você vai criar uma primeira versão do aplicativo.
Você já deve ter notado pelas aulas anteriores, que segundo meu estilo
de programação, eu vou colocar como atributo todos os elemetos da
interface gráfica que eu precisarei algum momento do código.
Agora que eu tenho os atributos, método onCreate,
eu vou colocar as referências para os elementos da interface gráfica
neles utilizando o método findViewByid.
Criadas as referências para todos os elementos da interface gráfica eu vou
criar array e esse array vai estar a lista de produtos selecionadas pelo usuário.
Esse array eu vou colocar como atributo e esse atributo
será do tipo arrayList uma arrayList
da classe produto, que foi a classe que eu criei na primeira aula.
E aqui no método onCreate eu vou instanciar esse arrayList.
Eu vou precisar do que nós chamamos de ArrayAdapter esse arrayAdapter
é o que fará a conversão de array formato compatível com o que a ListView espera.
Então eu vou criar primeiramente objeto do tipo arrayAdaptor,
o nome do objeto será ArrayAdaptor e eu vou
instanciar esse arrayAdapter no método onCreate.
Para instanciar esse arrayAdapter eu preciso no primeiro parâmetro de context
que eu vou colocar ActivityLocal, segundo parâmetro eu preciso de arquivo de layout.
Aqui eu poderia muito bem criar arquivo xml de layout ou eu
posso utilizar algum arquivo xml de layout que já
vem por padrão com o Android, e o arquivo que eu vou utilizar
é o arquivo que é referenciado por android.R.layout.
simple_list_item_1 no terceiro parâmetro
eu preciso colocar o array que será utilizado por esse arrayAdapter.
Feito isso, eu posso simplesmente chamar o
método SetAdapter da ListView e adicionar
esse arrayAdapter.
Eu mencionei que eu vou querer cancelar
a escolha de produto quando o usuário der clique longo.
Então para isso, eu vou precisar declarar listener.
O listener que eu vou declarar é do
tipo on Item Long Click Listener aqui está o código que eu inseri,
logo abaixo do comando ListView.setAdapter.
O código parece pouco longo, mas é fácil de entender.
Primeiramente eu criei listener,
o listener implementa a interface OnItemLongClickListener,
esse listener foi declarado a partir de uma classe anônima.
Essa classe anônima implementa o método OnItemLongClick
que é o método que é pedido pela interface OnItemLongClick Listener.
Dentro do método OnItemLongClick que é o método
disparado quando o usuário pressionar item do menu por alguns instantes o
que eu fiz foi criar uma tela de diálogo, uma janela de diálogo.
que é uma janelinha que o usuário terá a opção de dizer sim ou não.
Essa janela de diálogo foi criada usando o AlertDialogue Builder.
Aqui eu configurei título para ele, por exemplo, remover produto da lista
coloquei uma mensagem que o usuário vai ler, que é "você relamente deseja remover
o produto selecionado da lista?" Configurei ícone para ele,
e caso o usuário pressione o botão sim, botão yes,
o método executado será o método que está aqui dentro deste onClick,
o que basicamente o que este método faz é, se o usuário clicar sim,
eu removo o produto que ele clicou do arrayprodutos, por exemplo,
produtos.remove e no arrayAdapter eu notifico que alguma mudança ocorreu.
Isso fará com que a listView seja atualizada automaticamente.
Aqui você já viu então, como eu faço para remover item da listView
entretanto eu ainda não falei com eu vou fazer para adicionar item nesta ListView.
Para adicionar item na ListView eu vou ter que criar novo
método que é método que será disparado quando o botão for clicado.
Agora eu vou digitar esse novo método.
Aqui está o método Ad produto,
eu inicio esse método coletando tudo aquilo que o usuário inseriu.
Primeiramente eu coloco o item que ele selecionou na spinner depois
eu coloco se ele clicou não na checkBox e por
fim eu obtenho o preço que ele colocou na caixa de texto.
Feito isso, eu crio novo objeto da classe
produto e adiciono esse novo objeto no arrayProdutos.
Depois de adicionar no arrayProdutos eu notifico arrayAdapter que o meu produto
mudou, que a minha lista de produtos mudou para que ele atualize a ListView.
Vamos verificar agora qual é o resultado disso.
Aqui está o meu aplicativo, eu vou selecionar por exemplo feijão,
vou colocar como preço R$ 12,00 reais não vou colocar
como urgente e vou pedir para ele adicionar na ListView.
Agora eu vou colocar como urgente e pedir para adicionar de novo na ListView.
O que você pode perceber que o que está aparecendo na ListView é
código pouco confuso.
Isso acontece porque a ListView está pegando o método ToString
que está na classe produto.
Como eu não declarei ainda nada do método ToString,
o que a ListView utilizou é o método ToString da classe pay.
Então o que eu preciso fazer agora é sobrescrever o método ToString.
Este é o método ToString que eu gerei.
Primeiramente eu crio uma variável local STR do tipo String
e esta variável local é a concatenação do nome do produto com o preço,
sendo que eu coloquei o preço entre parênteses.
Feito isso, eu coloco asterisco se o produto é
urgente e não coloco nada se o produto não é urgente.
Isso vai gerar esta interface gráfica e aqui, por exemplo,
eu posso selecionar arroz, preço R$ 12,00 reais é urgente,
e o que aparece aqui é o item arroz, preço R$ 12,00 reais e asterisco aqui.
Posso colocar, por exemplo, macarrão, macarrão preço R$ 13,00 reais,
não é urgente, e eu vou colocar aqui o macarrão.
Percebam que o que está faltando agora é atualizar esse rodapé,
dizendo a soma de todos os produtos e a soma de todos os produtos urgentes.
Eu vou vir aqui na minha MainActivity e eu vou colocar
novo método que eu vou chamar de UpdateFooter.
[SOM] E
agora eu vou escrever o comportamento desse método.
Aqui está o método UpdateFooter
basicamente o que eu fiz foi criar duas variáveis locais,
uma total e uma urgente, iniciei essas variáveis com zero,
e depois disso eu pesquiso array de produtos e somo todos
os preços dos produtos, sendo que eu coloco todo mundo na variável
total e apenas os urgentes na variável urgentes.
Ao final eu coloco a String
apropriada na TextViewFooter que está abaixo da ListView.
Eu chamo este método após adicionar produto,
então é dentro de AddProduto, e eu também chamo este método
após remover produto então é dentro do código do Listener.
Vamos agora ver o resultado, aqui está o aplicativo no emulador,
vou colocar, por exemplo o arroz, preço é de R$ 12,00 reais, é urgente.
Agora vou colocar, por exemplo, banana; banana, preço apenas R$ 1,00 real,
e não é urgente, então neste caso, o total
foi R$ 13,00 reais e o total de urgente R$ 12,00 reais porque a banana não é urgente.
Agora eu vou remover,
por exemplo, a banana usando clique longo,
aqui aparece a janelinha perguntando se eu quero remover o produto da lista,
que é a janelinha que eu criei neste código que está aqui do lado.
Se eu clicar OK, ele é removido da lista e automaticamente é atualizada
a minha caixa de texto atualizando o valor da compra.