package com.cundong.izhihu.fragment; import uk.co.senab.actionbarpulltorefresh.extras.actionbarsherlock.PullToRefreshLayout; import uk.co.senab.actionbarpulltorefresh.library.ActionBarPullToRefresh; import uk.co.senab.actionbarpulltorefresh.library.listeners.OnRefreshListener; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.View; import com.cundong.izhihu.util.Logger; public abstract class BaseFragment extends Fragment implements OnRefreshListener { protected PullToRefreshLayout mPullToRefreshLayout; protected Logger mLogger = Logger.getLogger(); private Bundle savedState; public BaseFragment() { super(); if (getArguments() == null) setArguments(new Bundle()); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); ActionBarPullToRefresh.from(getActivity()).allChildrenArePullable() .listener(this) .setup(this.mPullToRefreshLayout); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Restore State Here if (!restoreStateFromArguments()) { // First Time, Initialize something here onFirstTimeLaunched(); } } @Override public void onDestroyView() { super.onDestroyView(); saveStateToArguments(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); saveStateToArguments(); } private void saveStateToArguments() { if (getView() != null) { savedState = saveState(); } if (savedState != null) { Bundle b = getArguments(); b.putBundle("internalSavedViewState", savedState); } } private boolean restoreStateFromArguments() { Bundle b = getArguments(); savedState = b.getBundle("internalSavedViewState"); if (savedState != null) { restoreState(); return true; } return false; } private void restoreState() { if (savedState != null) { onRestoreState(savedState); } } private Bundle saveState() { Bundle state = new Bundle(); onSaveState(state); return state; } protected abstract void onRestoreState(Bundle savedInstanceState); protected abstract void onSaveState(Bundle outState); protected abstract void onFirstTimeLaunched(); @Override public void onRefreshStarted(View view) { doRefresh(); } protected void doRefresh() { } protected void dealException(Exception e) { if (isAdded()) { mPullToRefreshLayout.setRefreshComplete(); } } }