ViewPager + Fragment懶加載
- 就是對於很多的viewpager+fragment而言,viewpager每次都會預加載很多個fragment,若是fragment內數據操作十分複雜和耗時的話,就會導致大量的浪費內存問題。
- 所以我們先編寫一個BaseFragment,以方便作爲基類,之後的子類就容易寫了.
主要是知道了Fragment源碼裏面有一個setUserVisibleHint的方法,這個方法是在onCreateView之前調用的,所以在這個方法裏面可以做一些處理.
廢話不多說,直接上代碼.
public abstract class BaseFragment extends Fragment {
protected boolean isVisiable=false;
private boolean isFinish = false;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_base, container, false);
initView(); //這裏初始化控件
isFinish = true; //初始化完成標識
onLazy();
return view;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(getUserVisibleHint()){
isVisiable=true;
onVisiable();
}else{
isVisiable=false;
onInvisiable();
}
}
protected void onVisiable() {
//若不可見 或 還沒初始化完成
if (isVisiable
&& isFinish) {
onLazy();
}
}
protected abstract void onLazy();
protected void onInvisiable() {
}
}
這裏的isVisiable作爲protected類型,也就是子類中也會出現,同理也可以知道其他protected 類型的也是可以在子類中直接調用的.
這裏的onLazy()就是懶加載數據的地方,回到子類中,代碼如下:
@Override
protected void onLazy() {
// TODO: 2017.3.11 加載數據
}
Fragment的懶加載就這麼簡單