我的应用中有几个地方需要隐藏或显示操作栏,问题是我仍然不确定隐藏或显示片段上ActionBar
的最佳位置。< / p>
我只有一个活动和几个不同的片段,其中一些我需要完全隐藏ActionBar
,我成功了但是我担心这个ActionBar
实际上是这样的附加到父活动(过去我得到了一些NullPointerException ...)。
所以我的问题是,当添加片段时,我应该在哪里隐藏或显示我的ActionBar
,当删除相同的片段时,我应该在哪里隐藏或显示它?
目前我正考虑将其隐藏在OnActivityCreated
中,然后将其显示在onDetach
中,但我担心如果出现任何错误,ActionBar
会保持隐藏状态发生在片段中(因此不会调用onDetach
)。
更新:我必须在我的代码中执行此操作,以避免在我的片段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
来显示{ {1}}再次。
答案 0 :(得分:1)
我在一个项目中有相同的要求,我可以使用ActionBar
和Fragment
方法在onAttach
内隐藏/显示onDestroy
而不会给您带来任何不便。然后,我在创建片段时使用它隐藏动作栏:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
getActivity().getActionBar().hide();
}
这一点,当它被删除时:
@Override
public void onDestroy() {
super.onDestroy();
getActivity().getActionBar().show();
}
在相同的方法中,我还能够addFlags
和clearFlags
以全屏模式制作片段。它运作良好。如果这有帮助,请告诉我。
答案 1 :(得分:1)
当Hide
附加到Fragment
时,最佳方法是Activity
。因此,Fragment
与Activity
public void onAttach(Activity activity) {}
当Show
与Fragment
Activity
又回来了
public void onDetach() {}
注意:通过设置onDestroy()
重新训练片段实例时,不会调用setRetainInstance
。
答案 2 :(得分:0)
如果您使用v4支持库,这是唯一的方法。
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
((ActionBarActivity) getActivity()).getSupportActionBar().hide();
}
@Override
public void onDestroy() {
super.onDestroy();
((ActionBarActivity) getActivity()).getSupportActionBar().show();
}