【问题标题】:How to proper disable action bar setDisplayHomeAsUpEnabled for main fragment when using fragment layouts on android?在android上使用片段布局时如何正确禁用主片段的操作栏setDisplayHomeAsUpEnabled?
【发布时间】:2014-04-10 23:27:01
【问题描述】:

嗨,我用片段概念实现了一个 android 应用程序。我正在使用 Sherlock 动作栏库。我有一个 mainActivity 和 5 个片段,当活动加载时,如果没有保存会话,它会加载第一个片段(主片段)。

我在需要启用 setDisplayAsHome 的每个片段中都使用这段代码:

    getSherlockActivity().getSupportActionBar().setDisplayHomeAsUpEnabled(true);

这在 MainFragment 上:

    getSherlockActivity().getSupportActionBar().setDisplayHomeAsUpEnabled(false);

如果我没有主片段,我会直接在 MainActivity 上使用第一段代码,但这意味着即使 mainFragment 也会显示后退按钮,这就是问题所在。

那么我如何才能仅在我的主要片段中禁用 setDisplayHomeAsUpEnabled(true) (并且仅在其上设置 false 将不起作用,它保持为 false 并且我必须在其他片段中添加 true)?

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    ActionBar 属于 Activity 而不是 Fragment,因此它只有一个 ActionBar 显示在顶部的所有 Fragment 中。

    因此,如果您将它或它的任何组件隐藏在一个片段中,您实际上是在隐藏 Activity 的唯一 ActionBar(所有片段的同一个 Activity),它将保持隐藏状态,直到您再次显示它。这就是它的工作方式。

    对于您的情况,您必须为除 MainFragment 之外的其余 Fragment 启用它。 (是的,你是对的)

    为了让自己放松,您可以在 Activity 中创建两种方法来显示和隐藏,

    public void showHome(){
       getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }
    

    和,

    public void hideHome(){
       getSupportActionBar().setDisplayHomeAsUpEnabled(false);
    }
    

    然后在各自的 Fragment 中调用它,

    getSherlockActivity().showHome() n viceversa.
    

    帮助不大,但仍会节省一些精力。 :)

    【讨论】:

    • 感谢您的宝贵时间,但我希望s another way. Maybe theres 有一种方法可以通过标题或其他方式检查当前加载的活动片段?我想标题的听众应该可以工作,关于如何做到这一点有什么不好的吗?再次感谢您。
    • 刚刚对这个想法感到震惊。 :) 我们可以在替换片段的方法中添加显示和隐藏代码。比如说,你在 Activity 中有一个 replaceFragment 方法,你每次都会调用它。在此方法中传递一个标志,为 MainFragment 传递一个标志,为休息提供 True,然后根据标志显示并在此方法本身中隐藏上述内容。让我知道这是否有效:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多