fragment 懶加載實現(xiàn)

viewpager通常和fragment配合使用,通過viewpager的滑動操作來是實現(xiàn)fragment的顯示和隱藏.很多的場景中,我們都希望可以實現(xiàn)只有在viewpager滑動到當前fragment,也就是當前fragment可見時才去加載數(shù)據(jù),渲染view,也就是fragment的懶加載.這可以在一定程度上提高性能.

主要代碼如下:

public class LazyLoadFragment extends Fragment {

    private static final long TIME_DELAY = 300;
    private boolean mIsVisibleToUser;
    private boolean mIsViewCreated;
    private Handler mHandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case MSG_LOAD_DATA:
                    //加載數(shù)據(jù)邏輯                   
                    break;
            }
        }
    };
    private boolean mHasLoadData = false;
    public static final int MSG_LOAD_DATA = 1;

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        this.mIsVisibleToUser = isVisibleToUser;
        if(isVisibleToUser){
            lazyLoadData();
        }else{
            stopLoadData();
        }
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mIsViewCreated = true;
        lazyLoadData();
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        mIsViewCreated = false;
    }

    private void lazyLoadData() {
        if(mIsVisibleToUser && mIsViewCreated && !mHasLoadData){
            if(!mHandler.hasMessages(MSG_LOAD_DATA)){
                mHandler.sendEmptyMessageDelayed(MSG_LOAD_DATA,TIME_DELAY);
            }
        }
    }

    private boolean hasLoadData(){        
        //增加判斷是否已經(jīng)加載了數(shù)據(jù)
        //判斷數(shù)據(jù)成員是否有值了,或者recyclerview中是否已經(jīng)有子view了
        return false;
    }

    private void stopLoadData() {
        if(mHandler.hasMessages(MSG_LOAD_DATA)){
            mHandler.removeMessages(MSG_LOAD_DATA);
        }
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容