繁体   English   中英

隐藏或显示片段中的ActionBar的正确位置

[英]Right place to hide or show the ActionBar in fragments

我的应用程序中有多个地方需要隐藏或显示操作栏,但问题是我仍然不确定在片段上隐藏或显示ActionBar的最佳位置。

我只有一个活动和几个不同的片段,其中一些我需要完全隐藏ActionBar ,我成功完成了它,但是我担心这个ActionBar实际上是附加到父活动的事实(我在其中得到了NullPointerException过去 ...)。

所以我的问题是,添加片段时,我应该在哪里隐藏或显示我的ActionBar ;删除相同片段时,我应该在哪里隐藏或显示它?

现在,我正在考虑例如将其隐藏在OnActivityCreated ,然后再将其显示在onDetach但我担心如果片段中发生任何错误(因此不会调用onDetach ), ActionBar将永远保持隐藏状态。

更新 :我必须在代码中执行此操作,以避免片段的onStart方法上的空指针:

@Override
public void onStart(){
    super.onStart();

    //if the actionbar exists
    if(getActivity().getActionBar() != null){
        getActivity().getActionBar().hide();
    }
}

UPDATE2

当尝试使用onAttach时,我实际上遇到了此异常: requestFeature() must be called before adding content 此错误发生在屏幕旋转期间,我认为原因是我没有使用setRetainInstance并且由于配置更改,该片段在重新启动时,该片段正在尝试向主要活动添加内容。

为了解决这个问题,我将代码放在onActivityCreated ,我想现在只将其放在此处,然后使用onDetachonDestroy再次显示ActionBar

我在一个项目中有相同的要求,并且可以使用onAttachonDestroy方法隐藏/显示FragmentActionBar而不会带来任何不便。 然后,在创建片段时,我用它来隐藏操作栏:

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    getActivity().getActionBar().hide();
}

并且,将其删除时:

@Override
public void onDestroy() {
    super.onDestroy();
    getActivity().getActionBar().show();
}  

在相同的方法中,我还能够添加addFlagsclearFlags以全屏模式制作片段。 运行良好。 让我知道是否有帮助。

最好的方法是在Fragment附加到ActivityHide 因为这是FragmentActivity相关联的实际位置

public void onAttach(Activity activity) {}

并且,当FragmentActivity分离时,将其Show回来

public void onDetach() {}

注意:通过设置setRetainInstance重新训练片段实例时,不会调用onDestroy()

如果使用v4支持库,则这是唯一的方法。

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    ((ActionBarActivity) getActivity()).getSupportActionBar().hide();
}
@Override
public void onDestroy() {
    super.onDestroy();
    ((ActionBarActivity) getActivity()).getSupportActionBar().show();
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM