web-dev-qa-db-fra.com

Comment extraire un fragment de pile

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.

54
user2085335

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);
    }
});
105
Archie.bpgc

Trois façons de faire apparaître un fragment de BackStack

  1. 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

1
MD Khali

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() {
            }
        });
    }
0
abhijit rajmane