当前位置: 首页 > 知识库问答 >
问题:

使用碎片恢复主页/抽屉按钮

蓝宜
2023-03-14

我有一个应用程序有一个主活动加载一个导航抽屉,一对碎片加载在该活动中...在导航抽屉中,我有4个选项a、B、C和D...第一个加载碎片a在我的活动上,最后3个加载碎片B。

FragmentA显示元素列表,在选择其中一个元素后,FragmentB用于加载其内容...当从FragmentA启动时,我想将FragmentB上的home(Hamburger/Drawer)图标更改为up图标(并将相应的行为更改为在select上生成popstack)。使用setDisplayHomeAsupenabled(true)对此没有问题,但由于所有这些都发生在一个活动中,如果我从导航抽屉中选择一个其他选项(例如B),向上图标仍将显示(它也显示在弹出的片段上)...如果我使用SetDisplayHomeAsupenabled(false)所做的只是从工具栏中隐藏home/Up按钮,我需要恢复home按钮,并确保从抽屉菜单中启动FragmentB时显示该按钮...

这个问题对任何人都有影响吗?还是我只是用错了片段?..任何建议都将不胜感激

编辑这或多或少是我的代码

在主要活动中。作为抽屉的onNavigationItemSelected(MenuItem项),我有一个类似于...

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();

它根据所选选项选择要加载的片段。

在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();

在堆栈中保留片段

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的后栈,看看是否有什么东西)...在那里,我只是用setDisplayShowHomeEnabled(true)更改抽屉图标...离开后面的箭头,如果我返回到FragmentA(通过onBackPressed())FragmentA显示箭头,并且我需要它来显示原来的抽屉图标...如果我从抽屉菜单中选择一个选项,也会发生同样的情况...这是否使我的问题更清楚?...我有一些注释代码在那里,因为它不工作…如果我用setDisplayHomeAsUpEnabled(false)激活行..图标只是从活动中消失(据我所知,这是函数的预期结果)...

共有1个答案

吴和硕
2023-03-14

过了一会儿我终于找到了这个帖子

使用片段时在Android导航抽屉图像和向上插入符号之间切换

我想当在接口中涉及一个抽屉时,您可能需要用该组件来处理这个问题...这篇文章给了我答案。
特别注意Wolfram Rittmeyer最后的评论

 类似资料:
  • 我开始创建一个应用程序,它使用一个活动(导航抽屉)和许多片段。但我无法使用工具栏上的“后退”按钮从片段中导航回来。硬件后退按钮工作正常。我知道我需要覆盖选项ItemSelected,捕捉android。R、 id.home,检查后堆栈中是否有内容,然后弹出它。在更改片段后,“burger”按钮变为“back arrow”,但当我单击它时,选项ItemSelected将打开NavigationDra

  • 我有一个关于片段管理的问题。 我已经编写了一个基于碎片的抽屉活动。每次点击菜单项后,您都会看到一个空片段。 我如何实现这一点?

  • 我在AWS EC2上运行3个节点集群,我的一个节点崩溃了,重新启动后,我看到2900个未分配的碎片和集群状态为红色。 我将索引配置为有5个碎片和1个副本--我不明白为什么重新启动后碎片不能从副本中恢复。 我尝试使用elasticsearch重新路由API https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-

  • 在阅读了关于片段和活动的文档和讨论后,我想我已经把情况弄清楚了。 活动应该为用户提供一个屏幕,用户可以在其中工作。导航到其他屏幕通常会破坏活动。 片段应该提供很少或单个功能组件,可以在活动中再次使用。片段的内容应该相互独立地工作,因此可以在多个活动中重用。 虽然这一切似乎都有道理,但有一件事我无法理解: 如果您创建一个新的Android应用程序,并选择创建Android导航抽屉应用程序的选项,为什

  • 我正在尝试按照本教程来学习如何创建导航抽屉,但我不想在用户从抽屉列表中选择一个项目后使用片段来显示新内容。解决这个问题最好的办法是什么?我使用的是API10,它不实现片段。

  • 我已经在我的项目中添加了一个导航抽屉活动,并尝试将项目作为片段添加。这就是我在主要活动中所做的。 默认片段是Home,它工作正常,正如预期的那样,但其他片段与Home片段重叠。(HomeFragment是唯一工作正常的)。我在每个片段类中都做过这样的事情: 我看不出错误在哪里。一切看起来都很好,但所有其他片段都显示在HomeFragment上。