Fragment的可見/不可見狀態(tài)

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

這種場景很常見,因為現(xiàn)在國內(nèi)很多app采用的交互都是底部有4到5個tab,然后點擊不同的tab可以切換到不同的頁面,而UI上的實現(xiàn)方法有多種,但最后幾乎都是在MainActivity中嵌套Fragment,而且我慣用的切換方式就是先把當前的Fragment隱藏,再show出要展示的Fragment,那么這種情況下,如果只是在一級界面不斷點擊下面幾個tab以切換各個界面的時候,由于fragment的宿主MainActivity一直都是可見狀態(tài),所以這種情況下Fragment的onResume并不會重復執(zhí)行,那么這個時候我們可以在onHiddenChanged()這個方法中處理自己的邏輯。需要注意的是第一次創(chuàng)建fragment不會執(zhí)行此方法。

@Override
    public void onHiddenChanged(boolean hidden) {
        super.onHiddenChanged(hidden);
        if(hidden){
           //pause
        }else{
           //resume
        }
    }

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

這個場景就不需要多說,直接在onResume中實現(xiàn)就好

3、ViewPager + Fragment

假設現(xiàn)在我們有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頁,假設現(xiàn)在所看到的頁面是f2,那么你滑到f1或者f3,這兩個都不會執(zhí)行onResume,所以不能在onResume中做處理,這個時候就要用setUserVisibleHint(boolean isVisibleToUser)方法,這個方法在onCreateView之前執(zhí)行,當Fragment可見的時候isVisibleToUser值為true

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

@Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            //相當于Fragment的onResume
        } else {
            //相當于Fragment的onPause
        }
    }

通過閱讀ViewPager和PageAdapter相關的代碼,切換Fragment實際上就是通過設置setUserVisibleHint和setMenuVisibility來實現(xiàn)的,調(diào)用這個方法時并不會釋放掉Fragment(即不會執(zhí)行onDestoryView)。
感謝:
Android Fragment(一)之onResume不執(zhí)行
android fragment不執(zhí)行onResume,onPause

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容