package ru.ltst.u2020mvp.base.mvp; import android.os.Bundle; import android.support.annotation.NonNull; import java.lang.ref.WeakReference; public abstract class BasePresenter<V extends BaseView> { private WeakReference<V> view = null; /** * Load has been called for the current {@link #view}. */ private boolean loaded; public final void takeView(V view) { if (view == null) throw new NullPointerException("new view must not be null"); if (this.view != null) dropView(this.view.get()); this.view = new WeakReference<>(view); if (!loaded) { loaded = true; onLoad(); } } public final void dropView(V view) { if (view == null) throw new NullPointerException("dropped view must not be null"); loaded = false; this.view = null; onDestroy(); } protected final V getView() { if (view == null) throw new NullPointerException("getView called when view is null. Ensure takeView(View view) is called first."); return view.get(); } protected void onLoad() { } protected void onDestroy() { } protected void onRestore(@NonNull Bundle savedInstanceState) { } protected void onSave(@NonNull Bundle outState) { } }