Android Fragment(一)之onResume不執行

相信從事Android開發的時候都會遇到一種需求,就是重到某個頁面的時候需要刷新下數據或者其他的業務邏輯,這個時候我們都會想到onResume,但有時候當我們在Fragment中的onResume上調用某個方法並重回到該Fragment之後,卻發現onResume沒有被調用,正是自己在開發上也遇到同樣的問題,所以在此作出一些總結,方便日後查詢

1、Activity嵌套多個Fragment作爲一級界面,並在此切換過程中

這種場景很常見,因爲現在國內很多app採用的交互都是底部有4到5個tab,然後點擊不同的tab可以切換到不同的頁面,而UI上的實現方法有多種,但最後幾乎都是在MainActivity中嵌套Fragment,而且我慣用的切換方式就是先把當前的Fragment隱藏,再show出要展示的Fragment,那麼這種情況下,如果只是在一級界面不斷點擊下面幾個tab以切換各個界面的時候,由於fragment的宿主MainActivity一直都是可見狀態,所以這種情況下Fragment的onResume並不會重複執行,那麼這個時候我們可以在onHiddenChanged()這個方法中處理自己的邏輯

2、一級界面爲Fragment,跳到二級界面再返回

這個場景就不需要多說,直接在onResume中實現就好

3、ViewPager + Fragment

假設現在我們有4個Fragment,分別爲f1、2、3、4
a---剛進入宿主activity : f1-onAttach > onCreate > f2-onAttach > onCreate > onCreateView > onActivityCreated > f1-onCreateView > onActivityCreated > onStart > onResume > f2-onStart > onResume
b---f1切換到f2 : f3-onAttach > onCreate > onCreateView > onActivityCreated > onStart > onResume
c---f2切換到f1 : f3-onPause > onStop > onDestroy
d---f1切換到f2 : f3-onCreatrView > onActivityCreated > onStart > onResume
e---f2切換到f3 : f4-onAttach > onCreate > f1-onPause > onStop > onDestroy > f4-onActivityCreated > onStart > onResume
可以很清楚看到除了滑到最左或最右viewpager只加載2頁之外,其他時候都是加載3頁,假設現在所看到的頁面是f2,那麼你滑到f1或者f3,這兩個都不會執行onResume,所以不能在onResume中做處理,這個時候就要用setUserVisibleHint(boolean isVisibleToUser)方法,這個方法在onCreateView之前執行,當Fragment可見的時候isVisibleToUser值爲true

注意:setUserVisibleHint()方法在第一種情況中並不會自動調用

由於本人經驗尚淺,如有錯漏還請各位同學指出,謝謝,,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章