content: package com.example.singleactivityapp.base;
  
  import com.example.singleactivityapp.Utils.FacebookInterface;
  
  import android.os.Bundle;
  import android.support.v4.app.Fragment;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  
  public abstract class BaseFragment extends Fragment {
  	
  	protected HostActivityInterface hostActivityInterface;
  	protected FacebookInterface facebookInterface;
  	
  	/**
  	 * Used to save from reinitializing Views when onViewCreated is called
  	 * again after a popBackStack() call. To be used only when caching
  	 * view state.
  	 */
  	public boolean hasInitializedRootView = false;
  	private View _rootView;
  	
  	/**
  	 * Will be used as handle to save transactions in backstack
  	 * @return tag text
  	 */
  	public abstract String getTagText();
  	
  	/**
  	 * To enable fragments capture back-press event and utilize it before
  	 * it's used in the hosting Activity.
  	 * @return true if consumed, else false
  	 */
  	public abstract boolean onBackPressed();
  	
  	
  	/**
  	 * Must be used if view caching is required from onCreateView of child 
  	 * fragment to create the rootview for it.
  	 * 
  	 * This is a trick to retain View state of a fragment when removed and 
  	 * added back.
  	 * 
  	 * However, this is not ideal and essentially a hack. This contradicts 
  	 * Fragment's goal of being memory-friendly. This method keeps cached
  	 * view state of a fragment when until it is referenced.
  	 * 
  	 * @param inflater
  	 * @param container
  	 * @param savedInstanceState
  	 * @param layout
  	 * @return rootView for fragment, either new or a cached one.
  	 */
  	public View createPersistentView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState, int layout) {
  		if (_rootView == null) {
              // Inflate the layout for this fragment
              _rootView = inflater.inflate(layout, null);
          } else {
              // Do not inflate the layout again.
              // The returned View of onCreateView will be added into the fragment.
              // However it is not allowed to be added twice even if the parent is same.
              // So we must remove _rootView from the existing parent view group
              // (it will be added back).
              ((ViewGroup)_rootView.getParent()).removeView(_rootView);
          }
  		
  		return _rootView;
  	}
  	
  	@Override
  	public void onCreate(Bundle savedInstanceState) {
  		super.onCreate(savedInstanceState);
  		if(!(getActivity() instanceof HostActivityInterface && getActivity() instanceof FacebookInterface)) {
  			throw new ClassCastException("Hosting activity must implement HostActivityInterface and FacebookInterface.");
  		} else {
  			hostActivityInterface = (HostActivityInterface) getActivity();
  			facebookInterface = (FacebookInterface) getActivity();
  		}
  	}
  	
  	@Override
  	public void onStart() {
  		super.onStart();
  		
  		// Mark this fragment as the selected Fragment.
  		hostActivityInterface.setSelectedFragment(this);
  	}
  }
  