Estou usando a biblioteca de compatibilidade do Android para implementar fragmentos e estendemos o exemplo de layout para que um fragmento contenha um botão que dispara outro fragmento.
No painel de seleção à esquerda, tenho 5 itens selecionáveis - A B C D E
.
Cada um carrega um fragmento (via FragmentTransaction:replace
) no painel de detalhes -a b c d e
Agora estendi o fragmento e
para conter um botão que carrega outro fragmento e1
também no painel de detalhes. Eu fiz isso no e
método onClick do fragmento da seguinte maneira:
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.replace(R.id.details_frag, newFrag);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
Se eu fizer as seguintes seleções:
E - e - e1 - D - E
Em seguida, o fragmento e
está no painel de detalhes. Isso está bem e o que eu quero. No entanto, se eu apertar o back
botão neste momento, não faz nada. Eu tenho que clicar duas vezes, porque e1
ainda está na pilha. Além disso, depois de clicar ao redor, recebi uma exceção de ponteiro nulo no onCreateView:
Para 'resolver' esse problema, adicionei o seguinte sempre que A B C D E
é selecionado:
FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
fm.popBackStack();
}
Imaginando se essa é a solução correta ou se eu deveria estar fazendo algo diferente.