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.