Eu só queria adicionar: -
Sair do backstack usando as seguintes
fragmentManager.popBackStack ()
trata-se de remover os fragmentos da transação, de maneira alguma ele removerá o fragmento da tela. Então, idealmente, pode não ser visível para você, mas pode haver dois ou três fragmentos empilhados um sobre o outro e, ao pressionar a tecla Voltar, a interface do usuário pode parecer desordenada, empilhada.
Apenas tomando um exemplo simples: -
Suponha que você tenha um fragmentoA que carrega o Fragmnet B usando fragmentmanager.replace () e, em seguida, adicionamosToToBackStack, para salvar esta transação. Então o fluxo é: -
PASSO 1 -> Fragmento A-> Fragmento B (passamos para o Fragmento B, mas o Fragmento A está em segundo plano, não visível).
Agora, você trabalha no fragmento B e pressiona o botão Salvar - que após salvar deve voltar ao fragmento A.
PASSO 2-> Ao salvar o FragmentB, voltamos ao FragmentA.
PASSO 3 -> Um erro tão comum seria ... no fragmento B, faremos o fragmento Manager.replace () fragmentB pelo fragmentoA.
Mas o que realmente está acontecendo, estamos carregando o Fragmento A novamente, substituindo o FragmentoB. Portanto, agora existem dois FragmentosA (um do PASSO-1 e um deste PASSO-3).
Duas instâncias de FragmentsA são empilhadas umas sobre as outras, que podem não estar visíveis, mas estão lá.
Portanto, mesmo se limparmos o backstack pelos métodos acima, a transação será limpa, mas não os fragmentos reais. Então, idealmente, nesse caso particular, ao pressionar o botão Salvar, você simplesmente precisa voltar ao fragmento A, executando simplesmente fm.popBackStack () ou fm.popBackImmediate () .
Portanto, corrija o Passo 3 -> fm.popBackStack () para o fragmento A, que já está na memória.