当 FragmentTransaction 完成时是否有可能发生事件?
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, fragment).commit();
事实上,我为我的应用程序使用了一个抽屉,我想invalidateOptionsMenu();
在事务完成时触发以更改我的操作栏的菜单。
不需要等待分片交易完成,可以调用
getSupportFragmentManager().executePendingTransactions();
在您的 commit() 函数调用之后。
这将确保交易完成。
嘿!尝试这个:
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);
并在事务中将标签添加到 backStack,如下所示:
getSupportFragmentManager().beginTransaction()
.replace(R.id.main, SomeFragment.newInstance(some argument))
.addToBackStack("someWord").commit();
为时已晚,但这可能会有所帮助(放在这里供某人使用):
....
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();
请检查 runOnCommit() 方法限制!
@Override
public void onResume() {
super.onResume();
getActivity().invalidateOptionsMenu();
}
当 FragmentTransaction 完成后,会调用 Fragment 的生命周期方法,如 onResume()
仅供参考,片段可以有自己的菜单,请参阅http://developer.android.com/reference/android/app/Fragment.html#setHasOptionsMenu(boolean)
您可以使用此答案中给出的建议--- 在事务从该onAnimationEnd
方法完成后运行您需要的代码。
为此,您需要使用例如在 FragmentTransaction 上设置动画
transaction.setCustomAnimations(R.anim.slide_in_left,
R.anim.slide_out_right);
您可以考虑使用 commitNow() 而不是 commit(),然后您可以确定事务已经完成。当然,如果您应该这样做,这取决于交易的复杂性。
这个方法怎么样:
FragmentManager fm = ...;
fm.beginTransaction().add(xxx, FRAGMENT_TAG).commit();
handler.obtainMessage(FRAGMENT_COMMIT_FINISHED).sendToTarget();
当 commit() 完成时,您可以获得FRAGMENT_COMMIT_FINISHED