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);