ActionBar 主页按钮 - 隐藏片段并清除返回堆栈

ActionBar Home button - hide fragment and clear back stack

我想在 actionBar 中实现 Home/Up 按钮。我有一个简单的应用程序,其中包含一个 Activity (A) 和两个片段(设置 (B) 和关于 ( C)).

在我发现使用 popBackStack 的其他问题中,但这不是解决方案,因为如果用户转到 A > B > C > B > C,后退按钮变为 C > B > C > B > A(这是正确的行为吗?)。

    switch (item.getItemId()){
        case R.id.action_settings:
            // get preferences fragment
            getFragmentManager().beginTransaction()
                    .replace(android.R.id.content, new PrefFragment())
                    .addToBackStack(null)
                    .commit();
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            return true;
        case R.id.action_about:
            // get about fragment
            getFragmentManager().beginTransaction()
                    .replace(android.R.id.content, new AboutFragment())
                    .addToBackStack(null)
                    .commit();
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            return true;
        case android.R.id.home:
            // clear back stack and show home screen?

            getSupportActionBar().setDisplayHomeAsUpEnabled(false);
            return true;
    }

我需要最后一个案例来隐藏任何片段(显示主要 activity window)并清除我的后台堆栈 - 回家,而不是返回。我怎样才能做到这一点?

我使用 AppCompat 库。

试试这个:

 private void clearBackStack() {
    FragmentManager manager = getSupportFragmentManager();
    if (manager.getBackStackEntryCount() > 0) {
        FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0);
         manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
    }
}

或致电

mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 

表格文档POP_BACK_STACK_INCLUSIVE是

Flag for popBackStack(String, int) and popBackStack(int, int): If set, and the name or ID of a back stack entry has been supplied, then all matching entries will be consumed until one that doesn't match is found or the bottom of the stack is reached.