J'ai une activité A, qui appelle fragment Bf, qui appelle fragment Cf. Je veux que Bf soit placé dans le panier lorsque Cf est appelé pour que les utilisateurs puissent y accéder. Cependant, si vous appuyez sur un bouton spécifique dans Cf, je souhaiterais que Bf soit supprimé du backstack. Est-ce possible?
Je vois qu'il existe une fonction popBackStack (). Cependant, je suis un peu confus sur la façon dont cela fonctionnerait. Est-ce sécuritaire d'utiliser cette fonction? Est-il possible qu'une activité d'une application différente soit insérée après Bf sur le pile?
De même, y a-t-il un moyen de modifier l'état savedInstanceState du fragment sur le backstack?
Je n'arrive pas à comprendre comment effectuer un test robuste sur le backstack à l'aide de l'émulateur.
Vous pouvez afficher le fragment par son nom. Tout en ajoutant des fragments à la pile arrière, donnez-leur un nom.
fragmentTransaction.addToBackStack("fragB");
fragmentTransaction.addToBackStack("fragC");
Ensuite, dans Fragment_C, ouvrez la pile arrière en utilisant le nom, par exemple .. fragB
et incluez POP_BACK_STACK_INCLUSIVE
someButtonInC.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = getActivity()
.getSupportFragmentManager();
fm.popBackStack ("fragB", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
});
Trois façons de faire apparaître un fragment de BackStack
Ajoutez simplement cette ligne
getActivity().getSupportFragmentManager().popBackStack();
2. #
getActivity().getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
3. #
getActivity().getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
son tout moyen facile de faire apparaître un fragment de backdtack
tout d'abord en remplaçant le fragment container_view, nous ajoutons name comme "Later Transaction"
getSupportFragmentManager().beginTransaction().replace(R.id.container_view,
profileFragment, "Profile").addToBackStack("Later Transaction").commit();
puis sur le bouton de retour en arrière pop la pile de retour en utilisant le nom de transaction ultérieure
int count = getSupportFragmentManager().getBackStackEntryCount();
if(count > 1) {
getSupportFragmentManager().popBackStack("Later Transaction",
FragmentManager.POP_BACK_STACK_INCLUSIVE);
} else {
DialogUtils.show(HomeActivity.this,
getString(R.string.exit_app_message), getString(R.string.alert),
"Yes","No", new DialogUtils.ActionListner() {
@Override
public void onPositiveAction() {
finish();
}
@Override
public void onNegativeAction() {
}
});
}