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(清点栈,它返回零?
你得叫fm.executePendingTransactions()
后ft.commit()
或之前fm.getBackStackEntryCount()
因为Commit()只安排了一通以后的交易。
我有一个类似的问题,在我的情况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,它总是返回零(它使用另一个片段经理):
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0 ) {
getFragmentManager().popBackStack();
}
}
而不是getSupportFragmentManager,它返回正确的数字:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0 ) {
getSupportFragmentManager().popBackStack();
}
}
希望能帮助到你!
这可能是为时已晚来回答这个问题。 希望这个答案将帮助别人呢。
主要是它取决于你的实际调用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();
}
另一种解决方案是使用FragmentManager.OnBackStackChangedListener
fm.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
Log.d("test", "backStackEntryCount: " + fm.getBackStackEntryCount());
}
});
这可能是为时已晚来回答这个问题。 希望这个答案将帮助别人呢。
你应该在getBackStackEntryCount的onResume()()方法。
这将是这样的:
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume: " + fragmentManager.getBackStackEntryCount());
for (int entry = 0; entry < fragmentManager.getBackStackEntryCount(); entry++) {
Log.i(TAG, "Found fragment: " + fragmentManager.getBackStackEntryAt(entry).getId());
}
}
祝好运!