动作栏主页按钮 - 隐藏片段并清除后堆栈



我想在actionBar中实现主页/向上按钮。我有一个简单的应用程序,有一个活动 (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;
    }

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

我使用 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为

popBackStack(String, int)

和 popBackStack(int, int) 的标志:如果设置, 并且已提供后退堆栈条目的名称或 ID,然后全部 匹配的条目将被使用,直到不匹配的条目 找到或到达堆栈底部。

最新更新