FragmentTransaction完成时的事件

FragmentTransaction完成后是否有可能发生事件?

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

事实上,我用我的应用程序的抽屉,我想触发invalidateOptionsMenu(); 当交易完成后,更改我的操作栏的菜单。

Solutions Collecting From Web of "FragmentTransaction完成时的事件"

您不需要等待片段事务完成,您可以调用

 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(); 
 @Override public void onResume() { super.onResume(); getActivity().invalidateOptionsMenu(); } 

当FragmentTransaction完成后,Fragment的生命周期方法将被调用,就像onResume()

FYI,片段可以有自己的菜单,请参阅http://developer.android.com/reference/android/app/Fragment.html#setHasOptionsMenu(boolean)

您可以使用此答案中给出的build议—在onAnimationEnd方法完成事务后运行所需的代码。

为此,您需要使用例如FragmentTransaction设置animation

 transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right); 

你可以考虑使用commitNow()而不是commit(),然后你可以确定事务已经完成。 当然,这是交易的复杂性问题,如果你应该这样做。