Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Problemas com Reclycer Viewer

Prezad@s, olá a todos.

Estou com os seguintes problemas em meu código:

Ao salvar um novo item, ele duplica este item no Recycler Viewer(ListaItens).

O outro problema é: Ao tentar salvar o arquivo de Lista(Item), em uma compra específica, ele não salva.

OBS: Fiz o commit com alguns casts não tratados.

https://github.com/jfbastos/Comprarei/tree/master/app/src/main/java/br/com/projeto/comprarei/ui/Activitys

6 respostas

João,

Você está adicionando 2 vezes :

 Item itemRecebido = (Item) data.getSerializableExtra(CHAVE_ITEM);
            listaItens.add(itemRecebido);
            adapter.adiciona(itemRecebido);
            preencheSumario();

Dentro do seu adapter voce faz o mesmo código cara, por essa razão duplica.

Obrigado, realmente. Não tinha me atentado a isso.

O outro problema é na adição dessa lista na lista de compras. Ele não está adicionando, mesmo eu passando index.

Chuto que pode ser por ordem de configuração.

Tenta colocar o metodo configuraRecyclerView(compraDAO.pegaTodos()); no onResume()

Não. No caso, quando ele retorna para a Activity ListaCompras, ele volta vazio. É como se ele não estivesse passando no putExtra.

Código de envio no Lista Itens, que ao clicar no botão de voltar ele devolve os dados pra Activity ListaCompras

        tituloCompra.setNavigationOnClickListener(view -> {
            intent.putExtra("items", (Serializable) listaItens);
            Log.d("Retorno", "Lista com dados " + listaItens.toString());
            setResult(Activity.RESULT_OK, intent);
            finish();
        });

E o código no ListaCompras aonde recebe os dados

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK && data != null) {
            List<Item> listaItems = (List<Item>) data.getSerializableExtra("items");
            Log.d("Retorno", "Lista com dados " + listaItems.toString());
            compraDAO.adicionaItems(listaItems, posicao);
        }
    }

Inclusive, o Log.d dentro do onActivityResult mostra vazio, e o de dentro do listener mostra o dado preenchido.

solução!

Muda a tipagem para arraylist, senão me engano list não é serializable e arraylist é. Precisa alterar nos dois lados

Rapaz, essa eu não sabia. MUITO obrigado.

Pesquisei aqui, e achei o seguinte:

"List does not implement Serializable because is it not a key requirement for a list. There is no guarantee (or need) that every possible implementation of a List can be serialized.

LinkedList and ArrayList choose to do so, but that is specific to their implementation. Other List implementations may not be Serializable."

fonte: https://stackoverflow.com/questions/4927227/why-doesnt-java-util-list-implement-serializable/4927292