Remove List of Products from a Campaign - Firebase + Android Studio

Asked

Viewed 68 times

-1

I have the block below that adds a list of Products to a Campaign

 recyclerProdutos.addOnItemTouchListener(new RecyclerItemClickListener(
                    this,
                    recyclerProdutos,
                    new RecyclerItemClickListener.OnItemClickListener() {
                        @Override
                        public void onItemClick(View view, int position) {

                        }

                        @Override
                        public void onLongItemClick(View view, final int position) {
                            new AlertDialog.Builder(CampanhaActivity.this).
                                    setTitle("Adicionar Produto").
                                    setMessage("Deseja adicionar esse produto?").
                                    setPositiveButton("Sim", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialogInterface, int i) {
                                            Produto produtoSelecionado = produtos.get(position);

                                            ProdutosCampanha produtoCampanha = new ProdutosCampanha();
                                            produtoCampanha.setUid(UUID.randomUUID().toString());
                                            produtoCampanha.setUidProduto(produtoSelecionado.getUid());
                                            produtoCampanha.setNomeProCampanha(produtoSelecionado.getNome());
                                            produtoCampanha.setDescProdCampanha(produtoSelecionado.getDescricao());


                                            if (campanhaRecuperada == null) {
                                                campanhaRecuperada = new Campanha(idInstituicao);
                                                produtoCampanha.setUidCampanha(campanhaRecuperada.getUid());

                                            }

                                            produtosCampanha.add(produtoCampanha);
                                            campanhaRecuperada.setItens(produtosCampanha);
                                            produtoCampanha.setUidCampanha(campanhaRecuperada.getUid());

                                            adapterProdutosCampanha = new AdapterProdutosCampanha(produtosCampanha,CampanhaActivity.this);
                                            recyclerProdutosCampanhaAdd.setLayoutManager(new LinearLayoutManager(CampanhaActivity.this));
                                            recyclerProdutosCampanhaAdd.setHasFixedSize(true);
                                            recyclerProdutosCampanhaAdd.setAdapter(adapterProdutosCampanha);

                                        }
                                    }).
                                    setNegativeButton("Não", null).show();


                        }

                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                        }
                    }
            )
    );

By adding the products to the campaign this way, in Firebase the object is saved this way inserir a descrição da imagem aqui as the image attached.

To remove have the method below, in which the removal is performed, however there is a problem:

  private void removeProdutoCampanha(final int position) {
    new AlertDialog.Builder(context)
            .setTitle("Remover Produto")
            .setMessage("Deseja remover esse Produto da Campanha?")
            .setPositiveButton("Sim", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    ProdutosCampanha produto = new ProdutosCampanha();
                    ProdutosCampanha produtosCampanhaAdd = produtosCampanha.get(position);
                    produtosCampanha.remove(produto);
                    removeProduto(position,uidProCamp);
                    produtosCampanha.remove(position);
                    notifyItemRemoved(position);

                }
            })
            .setNegativeButton("Não",null).show();
}

private void removeProduto(,int position,String uidProCamp) {

    produtoCampanhaRef = ConfiguracaoFirebase.getFirebase().child("Campanha").child(idCampanha).child("itens").child(String.valueOf(position));
    produtoCampanhaRef.removeValue();


}

Example: If I delete the item with heading 01 from the list, in Firebase this item 01 is deleted getting item 0 ,2 ,3 ,4

as shown below

inserir a descrição da imagem aqui

that is if next time I pass position 02, it will not exist and I will not be able to exclude.

I am unable to access a specific item to delete.

Remove List of Items within a Campaign - Firebase + Android Studio

1 answer

0


The simplest way I’ve seen to make that deletion without making any major changes to your code is as follows:

Since the moment you call the delete method you have access to the list of products then what you should do is remove from this list the item you want to delete and then save the list again in firebase. This way it will overwrite the items node and the products in each Dice will be adjusted.

1.Get the information that must be excluded; 2. remove from the list of products the item that is in the Dice; 3.Inside your removeProduct method save the list of products again in the "items node"

  • I did just that. In the removeProduct method, I removed the product in position. Since the save method is in another class it was necessary to do a for in Adapter, to return the updated Adapter items and added these items in a new list and saved this new list. Not if it’s the best way to do it, have it on the Adapter, but the way I structured the code was the exit I found. Thank you very much

  • It’s not the best way to do it, but it takes advantage of your code. To improve I suggest you read the article on the link https://firebase.google.com/docs/database/android/read-and-write?hl=pt-br#read_data_once

  • I’ll read it. Thanks for your help

Browser other questions tagged

You are not signed in. Login or sign up in order to post.