public abstract class BaseFragment extends Fragment { private boolean isVisible; //是否可见状态 private boolean isPrepared; //标志位,View已经初始化完成。 private boolean isFirstLoad = true; //是否第一次加载 protected LayoutInflater inflater; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { this.inflater = inflater; isFirstLoad = true; View view = initView(inflater, container, savedInstanceState); isPrepared = true; lazyLoad(); addListener(); return view; } /** * 如果是与ViewPager一起使用,调用的是setUserVisibleHint */ @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (getUserVisibleHint()) { isVisible = true; onVisible(); } else { isVisible = false; onInvisible(); } } /** * 如果是通过FragmentTransaction的show和hide的方法来控制显示,调用的是onHiddenChanged. * 若是初始就show的Fragment 为了触发该事件 需要先hide再show */ @Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); if (!hidden) { isVisible = true; onVisible(); } else { isVisible = false; onInvisible(); } } protected void onVisible() { lazyLoad(); } protected void onInvisible() { } protected void lazyLoad() { if (!isPrepared || !isVisible || !isFirstLoad) { return; } isFirstLoad = false; initData(); } protected abstract View initView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState); protected abstract void initData(); protected abstract void addListener(); @Override public void onDestroyView() { super.onDestroyView(); } }
BaseFragment封装
最新推荐文章于 2021-05-25 23:18:28 发布