【问题标题】:ActionBar Home button - hide fragment and clear back stackActionBar 主页按钮 - 隐藏片段并清除返回堆栈
【发布时间】:2017-01-06 13:45:04
【问题描述】:

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

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

我使用 AppCompat 库。

【问题讨论】:

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


    【解决方案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,然后所有 匹配的条目将被消耗,直到一个不匹配的条目是 找到或到达栈底。

    【讨论】:

    • 谢谢,我只需要使用getFragmentManager 而不是getSupportFragmentManager 否则我的后台计数为零。
    猜你喜欢
    • 1970-01-01
    • 2019-02-15
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多