美文网首页
Android 开发笔记 用懒加载的方式去加载fragment

Android 开发笔记 用懒加载的方式去加载fragment

作者: 陈先生的干货店 | 来源:发表于2020-01-02 14:16 被阅读0次

    基本的框架搭建

    /**
             * ****************************************************************
             *                  bottomBar (tabbar)                            *
             * ****************************************************************
             *  Home(tapLayout)     *     find    *    message    *    me     *
             * ****************************************************************
             * follow * Recommend  *              *               *           *
             * ****************************************************************
             * */
    

    1.首先App如果有tabbar可以选择 BottomBarLayout ,这个tabbar可以实现满足基本的tabbar的使用范畴。使用方法可以参考github链接地址。
    2.现在的App一般都是采用的沉浸式状态栏 ,我这里采用的是ImmersionBar,这个框架非常的好用,使用方法可以参考github连接地址。

    1. tabbar上面有四个模块 : home 、 find、 messge、 me ,这里我们可以把四个模块看做成四个fragment,那么,我们不能直接写四个fragment上面去,因为在开发的过程中会发现出现很多意想不到的问题,所以我们必须写一个BaseFragment ,这个fragment是,下面介绍一下这个BaseFrament怎么写:
    /**
     * 通过懒加载的形式去加载页面  大大的提升了App的性能
     * */
    public abstract class BaseFragment extends Fragment {
    
        private KProgressHUD kProgressHUD;
    
        public SGSharedPrefUtils sgSharedPrefUtils;
    
    
        public View view;
    
        public Activity mContext;
    
        /**
         * 是否初始化过布局
         */
        protected boolean isViewInitiated;
        /**
         * 当前界面是否可见
         */
        protected boolean isVisibleToUser;
        /**
         * 是否加载过数据
         */
        protected boolean isDataInitiated;
    
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater,
                                 @Nullable ViewGroup container,
                                 @Nullable Bundle savedInstanceState) {
    
            if (view == null) {
                view = inflater.inflate(getLayoutId(), container, false);
                ButterKnife.bind(this, view);
    
                mContext = getActivity();
    
                sgSharedPrefUtils = SGSharedPrefUtils.getInstance(mContext);
    
                this.initData();
            }
            return view;
        }
    
        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            isViewInitiated=true;
            //加载数据
            prepareFetchData();
        }
    
        @Override
        public void setUserVisibleHint(boolean isVisibleToUser) {
            super.setUserVisibleHint(isVisibleToUser);
            this.isVisibleToUser = isVisibleToUser;
            if (isVisibleToUser) {
                prepareFetchData();
            }
        }
    
        public void prepareFetchData() {
            prepareFetchData(false);
        }
    
    
        /**
         * 判断懒加载条件
         *
         * @param forceUpdate 强制更新,好像没什么用?
         */
        public void prepareFetchData(boolean forceUpdate) {
            if (isVisibleToUser && isViewInitiated && (!isDataInitiated || forceUpdate)) {
                loadData();
                isDataInitiated = true;
            }
        }
    
        /**
         * 懒加载
         */
        protected abstract void loadData();
    
        /**
         * 获取布局ID
         *
         * @return
         */
        protected abstract int getLayoutId();
    
        /**
         * 数据初始化操作
         */
        protected abstract void initData();
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            this.view = null;
        }
    
        @Override
        public void onDestroyView() {
            super.onDestroyView();
            ButterKnife.bind(getActivity()).unbind();
        }
    
        /**
         * [页面跳转]
         *
         * @param clz
         */
        public void startActivity(Class<?> clz) {
            startActivity(clz, null);
        }
    
        /**
         * [携带数据的页面跳转]
         *
         * @param clz
         * @param bundle
         */
        public void startActivity(Class<?> clz, Bundle bundle) {
            Intent intent = new Intent();
            intent.setClass(getActivity(), clz);
            if (bundle != null) {
                intent.putExtras(bundle);
            }
            startActivity(intent);
        }
    
    
        /**
         * [含有Bundle通过Class打开编辑界面]
         *
         * @param cls
         * @param bundle
         * @param requestCode
         */
        public void startActivityForResult(Class<?> cls, Bundle bundle,
                                           int requestCode) {
            Intent intent = new Intent();
            intent.setClass(getActivity(), cls);
            if (bundle != null) {
                intent.putExtras(bundle);
            }
            startActivityForResult(intent, requestCode);
        }
    
        public void showToast(String text) {
            Toast.makeText(mContext, text, Toast.LENGTH_LONG).show();
        }
    }
    
    

    4.上面的BaseFragment 我们可以直接的集成到你的App里面去使用了,非常好用 ,它是用过懒加载的形式把界面上面的gragment加载出来,集成BaseFragment后 我们直接在fragment里面实现下面的三个方法就行了:

      /**
         * 懒加载
         */
        protected abstract void loadData();
    
        /**
         * 获取布局ID
         *
         * @return
         */
        protected abstract int getLayoutId();
    
        /**
         * 数据初始化操作
         */
        protected abstract void initData();
    
    

    5.BaseFragment里面使用一个大家常用的库 :butterknife ,使用方法可以查看链接地址

    6.现在可以把所有的fragment都继承BaseFragment 了 ,然后在loadData方法里面实现网络请求 ,和设置该fragment

    7.四个fragment写好后就可以放在tabbarActivity里面了 ,这样我们的tabbar界面基本上就搭建完成了

    相关文章

      网友评论

          本文标题:Android 开发笔记 用懒加载的方式去加载fragment

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