使用 Fragments recover Home/Drawer 按钮

Using Fragments recover Home/Drawer Button

我有一个应用程序,其主 activity 加载了一个导航抽屉,还有一对片段加载到 activity ... 在导航抽屉中,我有 4 个选项 A、B、C 和 D ...第一个在我的 activity 上加载 FragmentA,最后 3 个加载 FragmentB ..

FragmentA 显示元素列表,并且在 selecting 这些元素之一时 FragmentB 用于加载其内容...我想在从 FragmentA 启动时将 FragmentB 上的主页 (hamburger/drawer) 图标更改为向上图标(并且更改相应的行为以在 select 上创建一个 popstack)。我对此使用 setDisplayHomeAsUpEnabled(true) 没有任何问题,但是由于所有这些都发生在一个 activity 中,如果我然后 select 导航抽屉中的另一个选项(比如 B)向上图标仍将显示(它也显示在弹出的片段上)... 如果我使用 setDisplayHomeAsUpEnabled(false) 所有这一切都是从工具栏中隐藏 home/up 按钮,我需要恢复主页按钮并确保它会在 FragmentB 时显示从抽屉菜单启动...

这个问题对任何人来说都是响铃吗?还是我只是以错误的方式使用片段? .. 任何建议将不胜感激

编辑 这或多或少是我在代码中的内容

在 Main Activity .. 作为抽屉的 onNavigationItemSelected(MenuItem item) 我有这样的东西...

switch(optionNumber) {
            case 0:
                  fragment = FragmentA.newInstance(optionNumber);
                break;
            default:
                  fragment = FragmentB.newInstance(optionNumber);
                break;
        }
        Fragment frag = fragmentManager.findFragmentByTag("current_fragment");
        if (frag != null && frag.getClass() == FolderFragment.class){
            ((FolderFragment)frag).resetScroll();
        }

        fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
        fragmentManager.beginTransaction().replace(R.id.content, fragment, "current_fragment").commit();

根据选项 selected..

要加载的片段select

在 FragmentA 中,我用这个调用 FragmentB ..

 FragmentB fFragment = FragmentB.newInstance(position);
    Bundle args = new Bundle();
    args.putString("filter", "something"); fFragment.setArguments(args);

    mActivity.getSupportFragmentManager().beginTransaction()
            .replace(R.id.flContent, fFragment, "current_fragment")
            .addToBackStack(null)
            .commit();

在堆栈中保存片段

在 onResume() 函数内的 fragmentB 中,我得到了类似...

String filter = getArguments().getString("filter", null);


    if (type != null) {
        mActivity.setTitle(title);
        mActivity.getSupportActionBar().setDisplayShowHomeEnabled(true);

    }else {
        /*mActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(false);
        mActivity.getSupportActionBar().setDisplayShowHomeEnabled(true);
        mActivity.getSupportActionBar().setHomeButtonEnabled(true);
        mActivity.getSupportActionBar().setIcon(R.mipmap.ic_menu);*/
    }

因此,当我创建 fragmentB 时,我检查参数并查看它是否来自 fragmentA(我也可以检查 fragmentmanager backstack 并查看是否有东西)...我只是将抽屉图标更改为setDisplayShowHomeEnabled(true) ...如果我 return 到 FragmentA(通过 onBackPressed())FragmentA 显示箭头,我需要它来显示原始抽屉图标 ...如果我 select抽屉菜单中的一个选项... 这是否使我的问题更加清晰?...我在那里有一些注释代码,因为它不起作用..如果我使用 setDisplayHomeAsUpEnabled(false) 激活该行..图标就会从 activity 中消失(据我所知,这是函数的预期结果)...

过了一段时间我终于找到了这个post

Switching between Android Navigation Drawer image and Up caret when using fragments

我想当在界面中涉及抽屉时,您可能需要用该组件处理这个问题...这个 post 给了我答案。
特别注意 Wolfram Rittmeyer

的最后评论