import android.os.Bundle;
/**
* 这是一个懒加载fragment基类
*/
public abstract class LazyBaseFragment extends BaseFragment {
private static final String TAG = LazyBaseFragment.class.getSimpleName();
private boolean isPrepared;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initPrepare();
}
/**
* 第一次onResume中的调用onUserVisible避免操作与onFirstUserVisible操作重复
*/
private boolean isFirstResume = true;
@Override
public void onResume() {
super.onResume();
if (isFirstResume) {
isFirstResume = false;
return;
}
if (getUserVisibleHint()) {
onUserVisible();
}
}
@Override
public void onPause() {
super.onPause();
if (getUserVisibleHint()) {
onUserInvisible();
}
}
private boolean isFirstVisible = true;
private boolean isFirstInvisible = true;
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
if (isFirstVisible) {
isFirstVisible = false;
initPrepare();
} else {
onUserVisible();
}
} else {
if (isFirstInvisible) {
isFirstInvisible = false;
onFirstUserInvisible();
} else {
onUserInvisible();
}
}
}
public synchronized void initPrepare() {
if (isPrepared) {
onFirstUserVisible();
} else {
isPrepared = true;
}
}
/**
* 第一次fragment可见(进行初始化工作)
*/
public void onFirstUserVisible() {
}
/**
* fragment可见(切换回来或者onResume)
*/
public void onUserVisible() {
}
/**
* 第一次fragment不可见(不建议在此处理事件)
*/
public void onFirstUserInvisible() {
}
/**
* fragment不可见(切换掉或者onPause)
*/
public void onUserInvisible() {
}
}
public abstract class BaseFragment extends Fragment {
protected View mRootView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (getLayoutId() <= 0) {
return super.onCreateView(inflater, container, savedInstanceState);
}
if (mRootView == null) {
mRootView = inflater.inflate(getLayoutId(), container, false);
}
return mRootView;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ButterKnife.bind(this, view);
afterCreate(savedInstanceState);
}
@Override
public void onDetach() {
super.onDetach();
ButterKnife.unbind(this);
}
protected abstract int getLayoutId();
protected abstract void afterCreate(Bundle savedInstanceState);
/**
* 在当前Fragment开启另外一个Fragment
*/
protected void startFragment(Fragment fragment) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.in_from_right, R.anim.out_to_left);
ft.replace(getId(), fragment);
ft.addToBackStack(null);
ft.commit();
}
@Override
public void onResume() {
super.onResume();
MobclickAgent.onPageStart(getClass().getName());
}
@Override
public void onPause() {
super.onPause();
MobclickAgent.onPageEnd(getClass().getName());
}
}