美文网首页
Fragment的可见/不可见状态

Fragment的可见/不可见状态

作者: 颤抖的闪电 | 来源:发表于2018-01-04 16:24 被阅读0次

    1、Activity嵌套多个Fragment作为一级界面,并在此切换过程中

    这种场景很常见,因为现在国内很多app采用的交互都是底部有4到5个tab,然后点击不同的tab可以切换到不同的页面,而UI上的实现方法有多种,但最后几乎都是在MainActivity中嵌套Fragment,而且我惯用的切换方式就是先把当前的Fragment隐藏,再show出要展示的Fragment,那么这种情况下,如果只是在一级界面不断点击下面几个tab以切换各个界面的时候,由于fragment的宿主MainActivity一直都是可见状态,所以这种情况下Fragment的onResume并不会重复执行,那么这个时候我们可以在onHiddenChanged()这个方法中处理自己的逻辑。需要注意的是第一次创建fragment不会执行此方法。

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

    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()方法在第一种情况中并不会自动调用

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

    通过阅读ViewPager和PageAdapter相关的代码,切换Fragment实际上就是通过设置setUserVisibleHint和setMenuVisibility来实现的,调用这个方法时并不会释放掉Fragment(即不会执行onDestoryView)。
    感谢:
    Android Fragment(一)之onResume不执行
    android fragment不执行onResume,onPause

    相关文章

      网友评论

          本文标题:Fragment的可见/不可见状态

          本文链接:https://www.haomeiwen.com/subject/tcwrnxtx.html