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