Sto usando la libreria di compatibilità Android per implementare frammenti e ho esteso l'esempio di layout in modo che un frammento contenga un pulsante che spara un altro frammento.
Nel riquadro di selezione sulla sinistra ho 5 voci selezionabili - A B C D E
.
Ognuno carica un frammento (via FragmentTransaction:replace
) nel riquadro dei dettagli -a b c d e
Ora ho esteso il frammento e
per contenere un pulsante che carica un altro frammento e1
anche nel riquadro dei dettagli. L'ho fatto sul e
metodo onClick del frammento come segue:
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.replace(R.id.details_frag, newFrag);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
Se faccio le seguenti selezioni:
E - e - e1 - D - E
Quindi il frammento si e
trova nel riquadro dei dettagli. Questo va bene e quello che voglio. Tuttavia, se premo il back
pulsante a questo punto non fa nulla. Devo fare clic due volte perché e1
è ancora in pila. Inoltre, dopo aver fatto clic su, ho ricevuto un'eccezione puntatore null in onCreateView:
Per "risolvere" questo problema ho aggiunto quanto segue ogni volta che A B C D E
è selezionato:
FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
fm.popBackStack();
}
Ti stai solo chiedendo se questa è la soluzione corretta o se dovrei fare qualcosa di diverso?