[英]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
,我想现在只将其放在此处,然后使用onDetach
或onDestroy
再次显示ActionBar
。
我在一个项目中有相同的要求,并且可以使用onAttach
和onDestroy
方法隐藏/显示Fragment
的ActionBar
而不会带来任何不便。 然后,在创建片段时,我用它来隐藏操作栏:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
getActivity().getActionBar().hide();
}
并且,将其删除时:
@Override
public void onDestroy() {
super.onDestroy();
getActivity().getActionBar().show();
}
在相同的方法中,我还能够添加addFlags
和clearFlags
以全屏模式制作片段。 运行良好。 让我知道是否有帮助。
最好的方法是在Fragment
附加到Activity
时Hide
。 因为这是Fragment
与Activity
相关联的实际位置
public void onAttach(Activity activity) {}
并且,当Fragment
与Activity
分离时,将其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.