package com.jess.arms.base; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.jess.arms.base.delegate.IFragment; import com.jess.arms.integration.cache.Cache; import com.jess.arms.integration.cache.CacheType; import com.jess.arms.integration.lifecycle.FragmentLifecycleable; import com.jess.arms.mvp.IPresenter; import com.jess.arms.utils.ArmsUtils; import com.trello.rxlifecycle2.android.FragmentEvent; import javax.inject.Inject; import io.reactivex.subjects.BehaviorSubject; import io.reactivex.subjects.Subject; /** * Created by Administrator on 2017/8/24 0024. */ public abstract class BaseLazyLoadFragment<P extends IPresenter> extends Fragment implements IFragment, FragmentLifecycleable { protected final String TAG = this.getClass().getSimpleName(); private final BehaviorSubject<FragmentEvent> mLifecycleSubject = BehaviorSubject.create(); private Cache<String, Object> mCache; //是否可见 protected boolean mIsFirstVisible=true; // 标志位,标志Fragment已经初始化完成。 public boolean isPrepared = false; @Inject protected P mPresenter; @NonNull @Override public synchronized Cache<String, Object> provideCache() { if (mCache == null) { mCache = ArmsUtils.obtainAppComponentFromContext(getActivity()).cacheFactory().build(CacheType.FRAGMENT_CACHE); } return mCache; } @NonNull @Override public final Subject<FragmentEvent> provideLifecycleSubject() { return mLifecycleSubject; } public BaseLazyLoadFragment() { //必须确保在Fragment实例化时setArguments() setArguments(new Bundle()); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); onPrepareStates(); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return initView(inflater, container, savedInstanceState); } /** * 实现Fragment数据的缓加载 * @param isVisibleToUser */ @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { onVisible(); } else { onInVisible(); } } protected void onInVisible() {} protected abstract void loadData(); public void onVisible() { if (mIsFirstVisible) { mIsFirstVisible = false; onPrepareStates(); } } private synchronized void onPrepareStates() { if (isPrepared) { loadData(); } else { isPrepared = true; } } @Override public void onDestroy() { super.onDestroy(); if (mPresenter != null) mPresenter.onDestroy();//释放资源 this.mPresenter = null; } /** * 是否使用eventBus,默认为使用(true), * * @return */ @Override public boolean useEventBus() { return true; } }