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

Restaurar posição Recycler View

Bom dia pessoal, estou criando uma animação de transicao de elementos compartilhados entre duas activity. Porém quando retorno para a activity que contem a lista, meu recycler view volta para o começo, ficando meio estranho a animação. Minha duvida é: tem como armazenar a posicao do recycler view, e qdo voltar para a view eu recuperar essa posicao?

7 respostas

Oi Jilles, tudo bem?

Não trabalhei muito com animação com RecyclerView, apenas explorei um pouco do básico do ItemTouchHelper, ou seja, de cara não sei uma solução para o seu problema. Sendo assim, manda o código que você implementou que eu dou uma olhada se consigo achar uma solução.

É importante notar que o adapter do RecyclerView sabe a sua posição a partir do getAdapterPosition(), então você pode usá-lo para pegar a posição :)

[]s

Opa alex, td bem?

meu problema está no método que eu chamo para ir para a tela de detalhes "problema", entre aspas. Pq funciona normal, mas quando passo a animação, na hora de retornar da tela de detalhes para a lista, gostaria de voltar para a mesma posição que estava antes

private void vaiParaDetalhe(Ocorrencia ocorrencia) {
        Intent intent = new Intent(this, DetalhesOcorrenciaActivity.class);
        intent.putExtra(CHAVE_OCORRENCIA, ocorrencia);
        ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(this, mRecyclerView, "transicaoCompartilhada"); //TODO adicionar efeito de transicao entre imagem
        startActivity(intent, optionsCompat.toBundle());
    }

pode ser visto na linha 245 do meuy projeto - ListaOcorrenciasActivity

https://github.com/jillesRagonha/Capstone-Project

solução!

Jilles eu entendi o problema, porém, dado que está usando a API do Firebase, eu não consigo te orientar com precisão o que resolveria com qualidade. (não domínio da ferramenta :/)

O detalhe é que você está carregando as ocorrências todas as vezes que o onAuthStateChanged() é chamado. Sendo assim você vai ter que mudar a sua estratégia para carregar as ocorrências, seja na chamada ou como vai adicionar as novas ocorrências. Aqui está o código que dá problema:

@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
   usuario = firebaseAuth.getCurrentUser();
   if (usuarioLogado(usuario)) {
       carregaDadosUsuario(usuario);
       // aqui tá o problema
       carregaOcorrencias(usuario);
   } else {
       // resto do código
   }
}

Então tirei a chamada para fora:

private void inicializaFirebase() {
   mFirebaseAuth = FirebaseAuth.getInstance();
   // migrei pra cá
   carregaOcorrencias(usuario);
   mAuthStateListener = new FirebaseAuth.AuthStateListener() {
       @Override
       public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
           usuario = firebaseAuth.getCurrentUser();
           if (usuarioLogado(usuario)) {
               carregaDadosUsuario(usuario);
           } else {
               // resto do código
           }
       }
   };
}

Funciona... Mas como falei, não mexo com a API do Firebase, então não sei o quão impactante é essa mudança. Sugiro testar e ver se atende a sua necessidade.

[]s

Realmente funcionou kkkkk. Vlw mesmo :D

Precisamos de um curso de material design completo hein :D

Opa, precisando é só avisar :D

Sobre esse tema de curso, estamos estudando bastante para criar um mais teórico como base e depois um de implementação, porém, não posso confirmar uma data, pois essa parte de design não depende apenas de mim hehe

E tá ficando legal a App em, parabéns.

[]s

Poxa, obrigado, estou terminando agora o curso de Room para poder implementar persistencia local e não depender apenas do firebase :D

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software