天天看點

fragment hide/show 生命周期

Fragment的使用越來越普遍了,掌握它的生命周期以及注意事項時非常有必要的,首先

All subclasses of Fragment must include a public empty constructor. The framework will often re-instantiate a fragment class when needed, in particular during state restore, and needs to be able to find this constructor to instantiate it.
           
也就是說每個繼承Fragment的類都必須要有公開的構造方法,以便fragment能在需要的時候還原原來的狀态。感覺很難了解?通俗的說就是:SDK還原fragment資料的時候,肯定先通過調用XXX.newInstance()方法,擷取到fragment的執行個體對象。這就是為什麼要提供一個公開的構造方法的原因了!!
           

其次,生命周期是必須了解的,這個就沒必要廢話了,網上搜下到處都是。

重點來了,fragment使用時常遇到的情況是,在一個activity中通過菜單選項的點選來切換不同的fragment,通常是需要儲存fragment的狀态的,就如編輯個人資訊子產品時點選其他菜單,傳回時你編輯的資訊應該要儲存的,而不是再次初始化。這時fragment的hide/show方法就派上用場了!

很快聰明的你就會發現fragment的生命周期怎麼不走了?onPause方法怎麼不調用了?onResume怎麼隻調用一次了?

這時此時方法onHiddenChanged派上用場了,當fragment隐藏時,該方法會調用傳入參數為true表示該fragment被隐藏了,當fragment調用了show方法後,該方法傳入的參數為false,表示該fragment正在顯示!

是以總結起來,如果使用hide/show方法來控制fragment的使用時,原本需要在onResume以及onPause方法做的事情就可以遷移到onHiddenChanged時進行管理,如:

if (hidden) {// 不在最前端界面顯示
				AA.onPause();
			} else {// 重新顯示到最前端中
				BB.onResume();		
			}
           

可以自行做個demo測試,下面貼出完整的生命周期:

fragment hide/show 生命周期

繼續閱讀