这是我的代码:
FragmentManager fragmentManager = getSupportFragmentManager();
try {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commitAllowingStateLoss();
} catch (Exception e) {
e.printStackTrace();
}
当我添加第一个片段时,我的方法getSupportFragmentManager().getBackStackEntryCount()
返回0.
当我添加第二个片段getBackStackEntryCount()
时返回1,但当我按下后退按钮getBackStackEntryCount()
时仍然返回1.
为什么?
UPD -
@Override
public void onBackPressed() {
super.onBackPressed();
updateToolbar(); // here I check backstackCount and update Toolbar
}
UPD2 -
private void updateToolbar() {
if (getSupportFragmentManager().getBackStackEntryCount()() > 0) {
showBackButtonOnToolBar();
} else {
showProfileButtonOnToolBar();
}
}
答案 0 :(得分:1)
您必须从popBackStack()
:
onBackPressed()
@Override
public void onBackPressed()
{
if (getSupportFragmentManager().getBackStackEntryCount() > 0)
{
getSupportFragmentManager().popBackStack();
}
else
{
super.onBackPressed();
}
}
更新
在if语句中的pop调用下面添加你的行updateToolbar();
。
答案 1 :(得分:1)
答案类似于Sarthak,但不是打电话:
body
调用您的片段管理器的实例,即if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
}
else {
super.onBackPressed();
}
fragmentManager
更新:
可能最好创建一个if (fragmentManager.getBackStackEntryCount() > 0) {
fagmentManager.popBackStack();
}
else {
super.onBackPressed();
}
字段,在活动的FragmentManager
中初始化它,然后在所有片段事务中使用它,添加到后台堆栈等等。