美文网首页
完美实现ViewPager+Fragment懒加载

完美实现ViewPager+Fragment懒加载

作者: mt大山 | 来源:发表于2018-10-31 17:37 被阅读0次

    1、首先创建一个BaseFragment基类,在基类里实现懒加载,以便其他子类调用。

    public class BaseFragment extends Fragment{
    
      private View view;
      // 判断view是否为空标志,防止创建view是报空指针异常。(因为Fragment的setUserVisibleHint方法在onCreateView之前调用,如果在此方法中加载控件会报空指针异常)
      private boolean isViewCreate;
      //判断当前Fragment是否显示标志
      private boolean isFragmentVisiable;
    
    
      //加载布局
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
            view = inflater.inflate(R.layout.fgt_base, container, false);
            return view;
    }
      //初始化标志(在onCreate里调用)
      private void initFlag(){
            isViewCreate = false;
            isFragmentVisiable = false;
      }
       @Override
        public void onCreate( Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            initFlag();
        }
    
    
      //调用setUserVisibleHint
     @Override
        public void setUserVisibleHint(boolean isVisibleToUser) {
            super.setUserVisibleHint(isVisibleToUser);
            //判断view是否为空 如果为空返回,不为空 代表 view已经创建
            if (view == null) {
                return;
            }
            isViewCreate = true;
            if (isFragmentVisiable) {
                onFragmentVisiableChange(true);
                isFragmentVisiable = true;
                return;
            }
            if (isFragmentVisiable) {
                onFragmentVisiableChange(false);
                isFragmentVisiable = false;
            }
        }
    
    
    
        @Override
        public void onViewCreated( View view,  Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
            if (!hasCreateView && getUserVisibleHint()) {
                onFragmentVisiableChange(true);
                isVisiableFlag = true;
            }
        }
    
        /*
            *
            * 如果Fragment第一次加载,等待OnCreateView后才会进入该回调方法,其他情    
            * 况和setUserVisiableHint(boolean一致)
            * isVisiable true 不可见->可见
            *                 false 可见 ->不可见
            *
            * */
        protected void onFragmentVisiableChange(boolean isVisiable) {
    
        }
    }
    

    到此BaseFragment已经封装完毕
    2、在Fragment里使用

    新建Fragment类继承BaseFragment 调用onFragmentVisiableChange()方法即可。

    相关文章

      网友评论

          本文标题:完美实现ViewPager+Fragment懒加载

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