Fragment 懶加載

前言

最近工作的時候,用到ViewPager 結合Fragment做了一個類似網易新聞的數據展示界面,想做到只有在Fragment可見的時候,才做一次數據加載,故再次封裝了一個LazyFragment類,在此做個記錄。

package com.xes.online.revision.view.fragment;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * Created by wwzhang on 2019/1/3
 */
public abstract class ReLazyFragment extends Fragment {

    private boolean isCreate;
    private View mRootView;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        if (mRootView == null) {
            mRootView = View.inflate(getContext(), setLayoutId(), null);
            initOthers(mRootView);
        }
        if (!isCreate && getUserVisibleHint()) {
            onVisible();
        }
        return mRootView;
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (mRootView == null) {
            return;
        }
        isCreate = true;
        if (isVisibleToUser) {
            onVisible();
        }
    }

    /**
     * fragment 可見回調 可以用數據加載
     */
    public abstract void onVisible();

    /**
     * 設置contentview
     */
    public abstract int setLayoutId();


    /**
     * @bref 初始化其他工具
     */
    public abstract void initOthers(View mRootView);
}

總結:我使用的時候,是ViewPager結合FragmentPagerAdapter 使用,定義mRootView 爲了複用Fragment的view,對於Fragment此時的生命週期可參考FragmentPagerAdapter中Fragment的生命週期。希望對您有所幫助。

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