web-dev-qa-db-fra.com

Evénement lorsque la FragmentTransaction est terminée

Est-il possible d'avoir un événement lorsque la FragmentTransaction est terminée?

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, fragment).commit();

En fait, j'utilise un tiroir pour mon application et j'aimerais déclencher invalidateOptionsMenu(); lorsque la transaction est terminée pour modifier le menu de ma barre d'actions.

30
lopez.mikhael

Vous n'avez pas besoin d'attendre la fin de la transaction, vous pouvez appeler 

getSupportFragmentManager().executePendingTransactions();

après votre appel à la fonction commit ().

Cela garantira que la transaction est terminée.

39
Eldhose M Babu

Il je! Essaye ça:

private OnBackStackChangedListener backStackListener =  new OnBackStackChangedListener() {

    @Override
    public void onBackStackChanged() {
        String name = "";
        int position = getSupportFragmentManager().getBackStackEntryCount();
        if(position!=0){
           FragmentManager.BackStackEntry backEntry=getSupportFragmentManager().getBackStackEntryAt(position-1);
           name=backEntry.getName();


        }
        if(position==0){
            mainActionBar();
        }
        else if(name=="someWord"){
            mainActionBar2();
        }
        else{
            mainActionBar3();
        }

    }
};
 getSupportFragmentManager().addOnBackStackChangedListener(backStackListener);

Et dans Transaction, ajoutez une balise à backStack comme ceci:

getSupportFragmentManager().beginTransaction()
                .replace(R.id.main, SomeFragment.newInstance(some argument))
                .addToBackStack("someWord").commit();
10
Mikelis Kaneps
@Override
public void onResume() {
    super.onResume();
    getActivity().invalidateOptionsMenu();
}

Lorsque la FragmentTransaction est terminée, les méthodes du cycle de vie du fragment seront appelées, comme onResume ()

Pour info, fragment peut avoir son propre menu, Voir http://developer.Android.com/reference/Android/app/Fragment.html#setHasOptionsMenu(boolean)

7
JIE WANG

Vous pouvez utiliser les conseils donnés dans cette réponse --- lance le code dont vous avez besoin une fois la transaction terminée à l'aide de la méthode onAnimationEnd.

Pour que cela fonctionne, vous devez définir une animation sur FragmentTransaction en utilisant, par exemple,.

transaction.setCustomAnimations(R.anim.slide_in_left,
                                R.anim.slide_out_right);
3
Mark Minto

que diriez-vous de cette méthode:

FragmentManager fm = ...;
fm.beginTransaction().add(xxx, FRAGMENT_TAG).commit();
handler.obtainMessage(FRAGMENT_COMMIT_FINISHED).sendToTarget();

lorsque la commit () est terminée, vous pouvez obtenir l'événement de FRAGMENT_COMMIT_FINISHED

0
WuHaojie

Vous pouvez envisager d'utiliser commitNow () au lieu de commit () et vous pouvez alors être sûr que la transaction est terminée . Bien sûr, le problème dépend de la complexité de la transaction si vous devez le faire ou non.

0
UriB