private static void changeFragment(Fragment f, boolean init) {
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.info_content, f,f.getClass().getName());
if(!init){
ft.addToBackStack(null);
}
ft.commit();
}当我想通过调用fm.getBackStackEntryCount()获得堆栈cout时,它返回零?
发布于 2013-01-16 00:45:07
您必须在ft.commit()之后或fm.getBackStackEntryCount()之前调用fm.executePendingTransactions()。因为commit()只为以后的传递调度事务。
发布于 2015-08-17 16:23:00
我也遇到过类似的问题,在我的例子中,getFragmentManager().getBackStackEntryCount()总是返回零。
我的问题是我使用了支持片段:
Fragment fragment = new MyFragment();
// note getSupportFragmentManager() instead getFragmentManager()
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame, fragment)
.addToBackStack(null)
.commit();
fragmentManager.executePendingTransactions();我检查了getFragmentManager() backStackEntryCount,它总是返回0(它使用了另一个片段管理器):
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0 ) {
getFragmentManager().popBackStack();
}
}而不是返回正确数字的getSupportFragmentManager:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0 ) {
getSupportFragmentManager().popBackStack();
}
}希望它能帮上忙!
发布于 2015-05-17 18:55:43
现在回答这个问题可能已经太晚了。无论如何,我希望这个答案会对某些人有所帮助。
这主要取决于您实际调用getBackStackEntryCount()方法的位置。在我的例子中,我是在调用super.onBackPressed()之后调用这个方法的。在调用此方法的那一刻,后台堆栈中没有任何片段。这就是为什么我总是收到0。
在onBackPressed()中调用方法的正确方式:
@Override
public void onBackPressed() {
try {
int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
Log.d("class", "items in backstack " + backStackEntryCount);
} catch (Exception e) {
e.printStackTrace();
}
super.onBackPressed();
}https://stackoverflow.com/questions/13964409
复制相似问题