title: Double fragment rotating Android with ActionBar
body: <p>I've made a simple Android Activity with an ActionBar to switch between 2 fragments.
  It's all ok until I rotate the device. In facts, when I rotate I've got 2 fragment one over the other: the previous active one and the first one.
  Why?
  If the rotation destroy and recreate my activity, why I obtain 2 fragments?</p>
  
  <p>Sample code:</p>
  
  <p><strong>Activity</strong></p>
  
  <pre><code>package rb.rfrag.namespace;
  
  import android.app.ActionBar;
  import android.app.ActionBar.Tab;
  import android.app.Activity;
  import android.os.Bundle;
  
      public class RFragActivity extends Activity {
      /** Called when the activity is first created. */
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          // Notice that setContentView() is not used, because we use the root
          // android.R.id.content as the container for each fragment
  
       // setup action bar for tabs
          final ActionBar actionBar = getActionBar();
          actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
          //actionBar.setDisplayShowTitleEnabled(false);
  
          Tab tab;
          tab = actionBar.newTab()
                  .setText(R.string.VarsTab)
                  .setTabListener(new TabListener&lt;VarValues&gt;(
                          this, "VarValues", VarValues.class));
          actionBar.addTab(tab);
  
          tab = actionBar.newTab()
                  .setText(R.string.SecTab)
                  .setTabListener(new TabListener&lt;SecFrag&gt;(
                          this, "SecFrag", SecFrag.class));
          actionBar.addTab(tab);
      }
  }
  </code></pre>
  
  <p><strong>TabListener</strong></p>
  
  <pre><code>package rb.rfrag.namespace;
  
  import android.app.ActionBar;
  import android.app.Activity;
  import android.app.Fragment;
  import android.app.FragmentManager;
  import android.app.FragmentTransaction;
  import android.app.ActionBar.Tab;
  
  public class TabListener&lt;T extends Fragment&gt; implements ActionBar.TabListener {
      private Fragment mFragment;
      private final Activity mActivity;
      private final String mTag;
      private final Class&lt;T&gt; mClass;
  
      /** Constructor used each time a new tab is created.
        * @param activity  The host Activity, used to instantiate the fragment
        * @param tag  The identifier tag for the fragment
        * @param clz  The fragment's Class, used to instantiate the fragment
        */
      public TabListener(Activity activity, String tag, Class&lt;T&gt; clz) {
          mActivity = activity;
          mTag = tag;
          mClass = clz;
      }
  
      /* The following are each of the ActionBar.TabListener callbacks */
  
      public void onTabSelected(Tab tab, FragmentTransaction ft) {    
          // Check if the fragment is already initialized
          if (mFragment == null) {
              // If not, instantiate and add it to the activity
              mFragment = Fragment.instantiate(mActivity, mClass.getName());
              ft.add(android.R.id.content, mFragment, mTag);
          } else {
              // If it exists, simply attach it in order to show it
              ft.attach(mFragment);
          }
      }
  
      public void onTabUnselected(Tab tab, FragmentTransaction ft) {
          if (mFragment != null) {
              // Detach the fragment, because another one is being attached
              ft.detach(mFragment);
          }
      }
  }
  </code></pre>