Eu tenho um código de cliente. Existe apenas uma atividade para todos os fragmentos, ou seja, a única atividade é gerenciar todos os fragmentos.
Esta atividade contém o seguinte código para qualquer fragmento no final do método desse fragmento-
Por exemplo - fragmento MoreFragment:
MoreFragment firstFragment = new MoreFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.article_fragment, firstFragment)
.addToBackStack(null).commit();
Assim,
1) Qual é o significado de addToBackStack(null)
seguido por a commit()
?
2) Por que você precisa passar um parâmetro nulo para addToBackStack
?
3) Como obter aquele fragmento após ser adicionado desta forma?
Parece que este código é inútil, pois executei o código sem a última linha .addToBackStack(null).commit()
e ele foi executado sem problemas.
android
android-fragments
Meu Deus
fonte
fonte
Respostas:
Citando documentos:
A ordem em que você adiciona alterações a uma FragmentTransaction não importa, exceto:
Você deve ligar por
commit()
último. Se você estiver adicionando vários fragmentos ao mesmo contêiner, a ordem em que você os adiciona determina a ordem em que aparecem na hierarquia de visualizações.Então você tem que se comprometer no final.
Não precisa ser nulo, pode ser uma string. Se não quiser, basta passar null.
Relativo:
Se você deseja navegar para o fragmento anterior, adicione-o ao backstack. Portanto, depende se você deseja adicionar o fragmento à pilha de retorno.
Você já tem a instância do fragmento
firstFragment
. Portanto, não sei o que você quer dizer com obter o fragmento mais tarde.Mais Informações @
http://developer.android.com/guide/components/fragments.html
http://developer.android.com/reference/android/app/FragmentTransaction.html#addToBackStack(java.lang.String)
fonte
getFragmentManager().popBackStackImmediate()
se o botão Voltar pode fazer isso sozinho com / sem passagem de parâmetro? Veja a resposta de - stackoverflow.com/questions/21156153/…A
tag
string emaddToBackStack(String name)
fornece uma maneira de localizar a pilha de retorno para depois ir diretamente para aquele local. Deve ser usado no métodopopToBackStack(String name, int flags)
:Em outras palavras, ele irá estourar sua pilha de volta até encontrar o fragmento que foi adicionado pelo
name
emaddToBackStack(String name)
.Por exemplo, se você fizer uma série de adições ou substituições ao gerenciador de fragmentos dando os nomes "frag1", "frag2", "frag3", "frag4" e posteriormente quiser voltar diretamente para o fragmento 2 adicionado com addToBackStack (" frag2 "), você liga
popToBackStack("frag2", 0)
.Assim,
Use
.addToBackStack("fragName")
: se você quiserpopToBackStack(String name, int flags)
pop mais de uma pilha posterior.Uso
.addToBackStack(null)
: Se você não quiser abrir mais de uma pilha posterior, mas ainda quiser abrir uma de cada vez. Faça isso mesmo se você não chamar explicitamente popToBackStack (), mas, em vez disso, permitirá que a implementação padrão do pressionamento de volta trate da pilha de retorno.Uso
.disallowAddToBackStack()
: Se você não quiser o back pressione ou chame popBackStack () explicitamente. Isso garantirá que nenhuma parte do código esteja usando .addToBackStack ().fonte
Suas respostas foram descontinuadas. Se você não quiser adicionar fragmentos para empilhar, você deve usar o snippet de código abaixo:
Abaixo você tem um exemplo bonito de como usá-lo:
fonte
disallowAddToBackStack
então, Quaisquer chamadas futuras para addToBackStack lançarão IllegalStateException. Se addToBackStack já tiver sido chamado, este método lançará IllegalStateException.