[英]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.