美文网首页
Fragment 浅谈Fragment的状态可见与不可见

Fragment 浅谈Fragment的状态可见与不可见

作者: 勤劳的蚂蚁 | 来源:发表于2019-01-25 16:46 被阅读3次

    Fragment 本身的生命周期随着依附的 Activity 的变化,Activity 生命周期不变 Fragment 的生命周期不变。

    1. setUserVisibleHint的使用场景:FragmentPagerAdapter+ViewPager,因为 FragmentPagerAdapter 中调用了 setUserVisibleHint(boolean boolean) 方法;
      getUserVisibleHint() 与setUserVisibleHint 联用,默认为 true;
      用于Fragment 懒加载处理;
      备注: mMenuVisible 与FragmentPagerAdapter
    2. onHiddenChanged 的使用场景add()+show()+hide() 处理Fragment ,因为FragmentManager 会调用
      onHiddenChanged 的方法。
    3. 通过 依附的Activity 获取 标识,与 Fragment 里面的标识比较,如果相同则判断显示。
    4. 不可通过Fragment current=getActivity().getSupportFragmentManager().findFragmentById(R.id.rl_container);
      if(current!=null&&current instanceof EnterFragment){ } current 如果是 show add hide ,获取的是最后的一个添加的 Fragment。
    setUserVisibleHint的使用场景:FragmentPagerAdapter+ViewPager
    这种方式我们还是比较常见的,譬如,谷歌自带的TabLayout控件,此种场景下,当我们切换fragment的时候,会调用setUserVisibleHint方法,不会调用onHiddenChanged方法,也不会走fragment的生命周期方法(fragment初始化完成之后,注意这里需要重写viewpager中使用的适配器的方法,让fragment不会被销毁,不然还是会遇到问题).具体方法提如下
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
             super.setUserVisibleHint(isVisibleToUser);
            if (isVisibleToUser) {
                  // 相当于onResume()方法--获取焦点
           } else {
               // 相当于onpause()方法---失去焦点
            }
    }
    
    
    onHiddenChanged的使用场景: 一般我们打开应用时底部会有四五个tab键,使用add()+show()来显示和隐藏Fragment,hide()跳转新的Fragment时,旧的Fragment回调onHiddenChanged(),不会回调onStop()等生命周期方法,而新的Fragment在创建时是不会回调onHiddenChanged(),所以一般会和onresume()方法配合使用。具体场景自己来判断。
    @Override
    public void onHiddenChanged(boolean hidden) {
                   if (hidden) {
                     //相当于Fragment的onPause()
                   } else {
                      // 相当于Fragment的onResume()
                }
        }
    
    
    

    相关文章

      网友评论

          本文标题:Fragment 浅谈Fragment的状态可见与不可见

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