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.
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.
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();
@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) }
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);
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.
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!
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.