public abstract class BaseFragment extends Fragment{
protected boolean isViewInitiated = false;
protected boolean isVisibleToUser = false;
protected boolean isDataInitiated = false;
View view;
public BaseFragment() {
super();
}
/**
* @param isVisibleToUser 注意:setUserVisibleHint()方法是在onCreate()方法、
* 甚至是onAttach()方法之前调用的,所以它里面不能有任何对Context上下文对象的调用!
* getUserVisibleHint()返回的变量,是App提供的代表此Fragment当前对于用户是否可见的一个布尔值;
* <p>
* setUserVisibleHint()在Fragment创建时会先被调用一次,传入isVisibleToUser = false
* 如果当前Fragment可见,那么setUserVisibleHint()会再次被调用一次,传入isVisibleToUser = true
* 如果Fragment从可见->不可见,那么setUserVisibleHint()也会被调用,传入isVisibleToUser = false
* 总结:setUserVisibleHint()除了Fragment的可见状态发生变化时会被回调外,在new Fragment()时也会被回调
* 如果我们需要在 Fragment 可见与不可见时干点事,用这个的话就会有多余的回调了,那么就需要重新封装一个
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
this.isVisibleToUser = isVisibleToUser;
prepareFetchData(false);//false:获取数据一次;true:每次可见时都会强制获取数据
prepareDoSomeThing();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
isViewInitiated = true;
//防止事件穿透
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
prepareFetchData(false);
prepareDoSomeThing();
}
public abstract void fetchData();//获取数据,执行一次
public abstract void doItEvery();//每次进入页面可见时都会执行
public boolean prepareFetchData(boolean forceUpdate) {
if (isVisibleToUser && isViewInitiated && (!isDataInitiated || forceUpdate)) {
fetchData();
isDataInitiated = true;
return true;
}
return false;
}
public boolean prepareDoSomeThing() {
if (isVisibleToUser && isViewInitiated) {
doItEvery();
return true;
}
return false;
}
}
懒加载BaseFragment
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 首先感谢KingJA提供的第三方库LoadSir,项目地址为:https://github.com/KingJA/...
- Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
- 多层嵌套后的 Fragment 懒加载 印象中从 Feed 流应用流行开始,Fragment 懒加载变成了一个大家...