webentwicklung-frage-antwort-db.com.de

Ereignis, wenn die FragmentTransaction abgeschlossen ist

Ist es möglich, ein Ereignis durchzuführen, wenn die FragmentTransaction abgeschlossen ist?

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

Tatsächlich verwende ich für meine Anwendung eine Schublade, und ich möchte invalidateOptionsMenu(); auslösen, wenn die Transaktion abgeschlossen ist, um das Menü meiner Aktionsleiste zu ändern.

30
lopez.mikhael

Sie müssen nicht warten, bis die Fragmenttransaktion abgeschlossen ist. Sie können anrufen 

getSupportFragmentManager().executePendingTransactions();

nach dem Aufruf der Funktion commit ().

Dadurch wird sichergestellt, dass die Transaktion abgeschlossen ist.

39
Eldhose M Babu

Hei! Versuche dies:

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);

Und in Transaction füge tag zu backStack hinzu:

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

Wenn die FragmentTransaction abgeschlossen ist, werden die Lebenszyklusmethoden des Fragments wie onResume () aufgerufen.

Zu Ihrer Information hat fragment can ein eigenes Menü, Siehe http://developer.Android.com/reference/Android/app/Fragment.html#setHasOptionsMenu(boolean) }

7
JIE WANG

Sie können den Hinweis in this answer --- verwenden, um den Code auszuführen, den Sie benötigen, nachdem die Transaktion mit der onAnimationEnd-Methode abgeschlossen wurde.

Damit dies funktioniert, müssen Sie in der FragmentTransaction eine Animation festlegen, z.

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

wie wäre es mit dieser Methode:

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

wenn das Commit () abgeschlossen ist, können Sie das Ereignis FRAGMENT_COMMIT_FINISHED erhalten.

0
WuHaojie

Zu spät, aber das kann helfen

....
fragmentTransaction.replace(R.id.contentFrame, fragment);
fragmentTransaction.runOnCommit(new Runnable() // be carefull on this call. check documentation!!
{
    @Override
    public void run()
    {
        ... do something...  // this will  run after fragment's on resume. you can check.
    }
});
fragmentTransaction.commit();

bitte überprüfen Sie die Einschränkungen der runOnCommit () -Methode!

0
Engin OZTURK

Sie könnten erwägen, commitNow () anstelle von commit () zu verwenden, und dann können Sie sicher sein, dass die Transaktion abgeschlossen ist. Natürlich hängt es von der Komplexität der Transaktion ab, ob Sie dies tun oder nicht.

0
UriB