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

基本的框架搭建

/**

* ****************************************************************

* bottomBar (tabbar) *

* ****************************************************************

* Home(tapLayout) * find * message * me *

* ****************************************************************

* follow * Recommend * * * *

* ****************************************************************

* */

1.首先App如果有tabbar可以选择 BottomBarLayout ,这个tabbar可以实现满足基本的tabbar的使用范畴。使用方法可以参考github链接地址。

2.现在的App一般都是采用的沉浸式状态栏 ,我这里采用的是ImmersionBar,这个框架非常的好用,使用方法可以参考github连接地址。

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界面基本上就搭建完成了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值