簡體   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