由于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();
}
}
} }