package com.jiutouxiang.base;


import android.os.Bundle;
import android.support.annotation.CallSuper;
import android.support.annotation.CheckResult;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.trello.rxlifecycle.FragmentEvent;
import com.trello.rxlifecycle.FragmentLifecycleProvider;
import com.trello.rxlifecycle.LifecycleTransformer;
import com.trello.rxlifecycle.RxLifecycle;

import rx.Observable;
import rx.subjects.BehaviorSubject;

/**
 * Created by Administrator on 2018/1/2.
 *
 * 不要使用kotlin
 */
public abstract class LazyFragment extends Fragment   {
    protected boolean isVisible;
    protected FragmentActivity activity;
    protected View rootView;
    /**
     * 控件是否初始化完成
     */
    private boolean isViewCreated;
    private boolean isDataFinished=false;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        activity=this.getActivity();
        if (null == rootView) {
            rootView = inflater.inflate(getLayoutResource(), container, false);
        }
        initView();
        initRxBus();
        if(isVisible && !isDataFinished){
            //当可见,同时没有价加载时调用
            initData();
            isDataFinished=true;
        }
        isViewCreated = true;
        return rootView;
    }
    /**
     * 在这里实现Fragment数据的缓加载.
     * setUserVisibleHint(boolean isVisibleToUser) 在Fragment OnCreateView()方法之前调用的
     * @param isVisibleToUser
     */
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if(getUserVisibleHint()) {
            isVisible = true;

            if(!isDataFinished && isViewCreated){
                //如果控件初始化完成,但没有进行数据填充,就填充数据
                initData();
                isDataFinished=true;
            }
            if(isDataFinished && isViewCreated){
                //当填充数据同时控件id不为空时调用
                onVisible();
            }
        } else {
            isVisible = false;
            if(isDataFinished && isViewCreated){
                //当填充数据同时控件id不为空时调用
                onInvisible();
            }
        }
    }
    //可见后
    protected void onVisible(){

    }
    //不可见
    protected void onInvisible(){
    }
    //初始化各种控件
    protected abstract void initView();
    //监听事件
    protected abstract void initRxBus();

    //填充数据
    protected abstract void initData();
    //获取布局文件
    public abstract int getLayoutResource();

    protected View getViewById(int id){
        return rootView.findViewById(id);
    }

    @Override
    public void onDestroyView() 
        super.onDestroyView();
        if (null != rootView) {
            ((ViewGroup) rootView.getParent()).removeView(rootView);
        }
    }


    @Override
    public void onDestroy() {
        super.onDestroy();
    }


}

//关闭预加载,默认一次只加载一个Fragment

ViewPager.setOffscreenPageLimit(1);

results matching ""

    No results matching ""