当我按下Actvity

时间:2016-10-07 13:15:10

标签: android android-fragments

这是我的代码:

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();
    }
}

2 个答案:

答案 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中初始化它,然后在所有片段事务中使用它,添加到后台堆栈等等。