由于fragment的onResume()等回调的调用时机与Activity不一样,导致用起来比较麻烦,所以我重新封装了一下回调函数,十分简单。
使用时只需要继承此基类,使用onFragmentXXX系列回调即可。
public class AbsFragment extends Fragment {
/*-------------------------------------
* 属性
*-------------------------------------*/
/**是否已经onResume()了*/
private boolean isResume = false;
/**setUserVisibleHint(boolean)传入的值*/
private boolean isVisbleToUser = false;
/*-------------------------------------
* protected方法
*-------------------------------------*/
/**
* Fragment创建时调用的函数,建议子类重写这个方法因为生命周期比较简单
* @param savedInstanceState
*/
protected void onFragmentCreate(Bundle savedInstanceState) {
}
/**
* Fragment销毁时调用的函数,建议子类重写这个方法因为生命周期比较简单
* @param savedInstanceState
*/
protected void onFragmentDestroy() {
}
/**
* Fragment可见时调用的函数,建议子类重写这个方法因为生命周期比较简单
* @param savedInstanceState
*/
protected void onFragmentResume() {
}
/**
* Fragment不可见时调用的函数,建议子类重写这个方法因为生命周期比较简单
* @param savedInstanceState
*/
protected void onFragmentPause() {
}
/*-------------------------------------
* public方法
*-------------------------------------*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
onFragmentCreate(savedInstanceState);
}
@Override
public void onDestroy() {
onFragmentDestroy();
super.onDestroy();
}
@Override
public void onResume() {
super.onResume();
isResume = true;
if(isVisbleToUser) {
onFragmentResume();
}
}
@Override
public void onPause() {
isResume = false;
if(isVisbleToUser) {
onFragmentPause();
}
super.onPause();
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
this.isVisbleToUser = isVisibleToUser;
if(isResume) {
if(isVisibleToUser) {
onFragmentResume();
} else {
onFragmentPause();
}
}
}
}