ActionBar Home按钮 - 隐藏片段并清除后台堆栈

时间:2017-01-06 13:45:04

标签: android android-fragments android-actionbar android-appcompat android-homebutton

我想在actionBar中实现Home / Up按钮。我有一个活动( 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库。

1 个答案:

答案 0 :(得分:1)

试试这个:

 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,然后全部   匹配的条目将被消耗,直到不匹配的条目为止   找到或达到堆栈的底部。