Android ViewPager + Fragment懶加載

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的懶加載就這麼簡單

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章