Digamos que eu tenha uma atividade que tenha fragmentos adicionados programaticamente:
private void animateToFragment(Fragment newFragment, String tag) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, newFragment, tag);
ft.addToBackStack(null);
ft.commit();
}
Qual é a melhor maneira de retornar ao fragmento anterior que estava visível?
Encontrei a funcionalidade Trigger back-button no clique no botão no Android, mas estou pensando que simular um evento de tecla back não é o caminho certo para isso (e também não consigo fazê-lo funcionar):
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
Ligar finish()
apenas fecha a atividade na qual não estou interessado.
Existe uma maneira melhor de fazer isso?
android
android-fragments
back-stack
Aske B.
fonte
fonte
getFragmentManager().popBackStackImmediate();
fez o truque. Obrigado.Para elaborar as outras respostas fornecidas, esta é a minha solução (colocada em uma Atividade):
fonte
fm.getBackStackEntryCount() > 1
para retornar a atividade quando houver apenas o primeiro fragmento na pilha.Quando estamos atualizando / adicionando os fragmentos,
Deve incluir o
.addToBackStack()
.Depois disso, se dermos o
getFragments.popBackStackImmediate()
, retornará true se adicionarmos / atualizarmos os fragmentos e voltarmos para a tela atual.fonte
Adicione essas linhas ao seu método onBackPressed (). O método popBackStackImmediate () o levará de volta ao fragmento anterior se você tiver algum fragmento na pilha traseira `
`
fonte
Esta solução funciona perfeitamente para a navegação de fragmentos com base na barra inferior quando você deseja fechar o aplicativo quando pressionado novamente no fragmento primário.
Por outro lado, quando você está abrindo o fragmento secundário (fragmento em fragmento) que é definido como "DetalhadaPizza" no meu código, ele retornará o estado anterior do fragmento primário. Felicidades !
Atividades internas nas costas pressionadas colocam o seguinte:
E inicie o outro fragmento assim:
fonte
Essas respostas não funcionarão se eu não tiver addToBackStack () adicionado à minha transação de fragmento, mas você pode usar:
do seu fragmento para voltar um passo;
fonte
Programaticamente volte ao fragmento anterior usando o código a seguir.
fonte
Para fazer com que o fragmento volte novamente, basta adicionar o fragmento ao backstack que você deseja pressionar novamente, por exemplo:
No caso acima, eu estou abrindo
LoginFragment
quandoButton button
é pressionada, agora o usuário está emSignupFragment
. Então, seaddToBackStack(TAG)
for chamado, ondeTAG = "SignupFragment"
, quando o botão Voltar for pressionadoLoginFragment
, voltaremos paraSignUpFragment
.Feliz codificação!
fonte
Ao adicionar o
fragment_tran.addToBackStack(null)
último fragmento, sou capaz de voltar ao último fragmento.adicionando novo fragmento :
fonte
Eu vim aqui procurando ou com a mesma idéia e, enquanto isso, criei a minha própria, que acredito que não é tão ruim e funciona com o ViewPager.
Então, o que fiz foi substituir o método onBackPressed na atividade pai que contém o viewPager e configurá-lo para voltar sempre menos 1 posição até atingir o primeiro fragmento e depois fechar a atividade.
Isso pode ter uma queda, pois só volta um caminho à esquerda de cada vez; portanto, pode não funcionar muito bem se houver guias e você mudar de posição com os fragmentos ignorados (passando de 0 a 2 e pressionando para trás). 1, em vez de 0)
No meu caso, com 2 fragmentos no viewPager sem guias, ele funciona bem.
fonte
Experimente o código abaixo:
fonte