1
resposta

Adapter não atualiza após edição

Olá, pessoal.

Ao editar um registro, por exemplo, constando o nome "Thiago" e altero para "Thiago Ornelas", o adapter atualiza para o novo nome (Thiago Ornelas) e volta para o antigo (Thiago). Quando eu mudo de tela e retorno, aí sim mostra o nome novo (Thiago Ornelas).

Não entendi o motivo, pois estou adicionando a lista atualizada, usando o setAdapter e o notifyDataSetChanged.

Como se eu não estivesse usando a mesma instância do adapter (talvez seja até isso, mas para mim o código está certo).

Main

@Override
    protected void onResume() {
        super.onResume();
        listaVisitasView.configuraAdapter(listaDeVisitas);
        BuscaNaWeb_E_AtualizaInterno();
        Toast.makeText(this, "Atualizando lista", Toast.LENGTH_SHORT).show();
    }

ListaVisitasView

public void configuraAdapter(RecyclerView listaDeVisitas) {
        new Busca_TODAS_Visitas_Pela_SituacaoTask(situacaoDAO, visitaDAO, encontradas -> {
            adapter.atualiza(encontradas);
            listaDeVisitas.setAdapter(adapter);
            configuraItemTouchHelper(listaDeVisitas);
            adapter.setOnItemClickListener((visita, posicao) -> {
                Toast.makeText(context, "Carregando visita", Toast.LENGTH_SHORT).show();
                new buscaVisitaPeloId(visitaDAO, visita, this::vaiParaEditaVisita).execute();
            });
        }).execute();
    }

Método atualiza do Adapter

public void atualiza(List<Visita> visitas) {
        this.visitas.clear();
        this.visitas.addAll(visitas);
        notifyDataSetChanged();
    }

Poderiam me ajudar?

1 resposta

Fala Thiago, de boa ?

Cara olhando seu código, parece que tudo está certo.

Olhando aqui, no onresume tu atualiza as coisas no adapter, que faz a busca no DAO e com isso tu passa para lista do adapter, que até ai blz :)

Acho que o problema é o BuscaNaWeb_E_AtualizaInterno()

Pq acho que ele seta o que tá lá e por isso que está dando conflito, imagino que possa começar vendo desse ponto.

Como mexer com sincronização é algo meio complicado, por ser que esse tipo de coisa role mesmo, ainda mais quando alteramos os dados em ambos lados sem sincronização.