哎,不想传播负能量,也无心写代码和博客,直接把项目中测试通过的懒加载Fragment方法贴上来吧,直接copy到项目中,稍微配置就可以使用
/**
* Created by J_X on 2016/7/29.
* This Class is for Fragment, which wanna delay to load data
* This Class is always use in ViewPager+Fragment firework
*
* @see com.study.moodline.as.activities.SignActivity
* @see com.study.moodline.as.fragments.InformationFragment
*/
public abstract class BaseLazyLoadFragment extends BaseFragment {
/**
* Has the fragment was visible for user?
*/
public boolean isUserVisiable;
/**
* Has view readied to create and initiate?
*/
public boolean isViewInitiated;
/**
* Has data loaded?
*/
public boolean isDataLoaded;
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
DebugLogUtil.getInstance().Debug("onViewCreated:");
isViewInitiated = true;
getData();
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
DebugLogUtil.getInstance().Debug("setUserVisibleHint:"+getUserVisibleHint());
if (getUserVisibleHint()) {
this.isUserVisiable = true;
getData();
}else
{
this.isUserVisiable = false;
}
}
/**
* subclass implements this method to loading data lazily;
*
* @return Has loaded?
*/
public abstract boolean loadingData();
/**
* Default Method don't need to force updating data
* @return
*/
protected boolean getData()
{
return getData(false);
}
/**
* If fragment is visible and view has initiated while data hasn't load or user force updating data,
* this fragment will to loading data
* @param isForceUpdate if true will force updating data
* @return
*/
protected boolean getData(boolean isForceUpdate) {
DebugLogUtil.getInstance().Error("isUserVisiable:"+isUserVisiable);
DebugLogUtil.getInstance().Error("isViewInitiated:"+isViewInitiated);
DebugLogUtil.getInstance().Error("isDataLoaded:"+isDataLoaded);
if (isUserVisiable && isViewInitiated && (!isDataLoaded || isForceUpdate)) {
this.isDataLoaded = loadingData();
return this.isDataLoaded;
}
return false;
}
}