咱們的目標是在操做欄右側加上一個選項菜單,點擊它就可顯示或者隱藏操做欄的副標題。html
因爲操做欄是在API11級之後出現的,所以必須考慮兼容性問題。咱們直接讓低於API11的設備根本看不到選項菜單便可。創建res/menu-v11,將menu的xml放入其中,spa
添加上該選項菜單Item。xml
而後老步驟:1.setHasOptionsMenu(true)htm
2.onCreateOptionsMenu()blog
3.onOptionsItemSelected()it
看似完美解決了問題,實際上有一個嚴重的bug。那就是經典的設備旋轉問題。若是已經顯示副標題,旋轉後該副標題會爲空,該選項菜單的title也會變成原先創造視圖時title的默認值。io
如何解決呢?有的人會想到保存fragment實例,讓其在設備旋轉期間處於被保留狀態。這個想法很棒,但忽略了一點,不管是副標題仍是選項菜單的顯示問題都屬於視圖問題,而無論fragment實例是否會被保存,fragment視圖在配置改變(如旋轉設備時)必定會被銷燬(而它爲何必定會被摧毀,請讀者閱讀http://www.cnblogs.com/JiMoRuXue/p/5045506.html)。
兼容性
不管以前有無副標題,視圖重建時,都會沒有。所以咱們須要在fragment中添加一個flag用於存儲副標題是否顯示。在視圖重建時根據該flag來判斷是否須要顯示副標題。配置
最後總結一下,視圖層顯示的數據若是是在非建立視圖方法中設置的,那麼在設備旋轉這類改變配置的行爲後,因爲視圖的銷燬重建,就算fragment實例一直保留,也枉然。fragment