title: Duplicate ID, tag null, or parent id with another fragment for com.google.android.gms.maps.MapFragment
body: <p>I have an application with three tabs.</p>
  
  <p>Each tab has its own layout .xml file. The main.xml has its own map fragment. It's the one that shows up when the application first launches.</p>
  
  <p>Everything works fine except for when I change between tabs. If I try to switch back to the map fragment tab, I get this error. Switching to and between other tabs works just fine.</p>
  
  <p>What could be wrong here?</p>
  
  <p>This is my main class and my main.xml, as well as a relevant class that I use ( you will also find the error log at the bottom )</p>
  
  <p><strong>main class</strong></p>
  
  <pre><code>package com.nfc.demo;
  
  import android.app.ActionBar;
  import android.app.ActionBar.Tab;
  import android.app.Activity;
  import android.app.Fragment;
  import android.app.FragmentTransaction;
  import android.os.Bundle;
  import android.widget.Toast;
  
  public class NFCDemoActivity extends Activity {
  
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
  
          ActionBar bar = getActionBar();
          bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
          bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
  
          bar.addTab(bar
                  .newTab()
                  .setText("Map")
                  .setTabListener(
                          new TabListener&lt;MapFragment&gt;(this, "map",
                                  MapFragment.class)));
          bar.addTab(bar
                  .newTab()
                  .setText("Settings")
                  .setTabListener(
                          new TabListener&lt;SettingsFragment&gt;(this, "settings",
                                  SettingsFragment.class)));
          bar.addTab(bar
                  .newTab()
                  .setText("About")
                  .setTabListener(
                          new TabListener&lt;AboutFragment&gt;(this, "about",
                                  AboutFragment.class)));
  
          if (savedInstanceState != null) {
              bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
          }
          // setContentView(R.layout.main);
  
      }
  
      @Override
      protected void onSaveInstanceState(Bundle outState) {
          super.onSaveInstanceState(outState);
          outState.putInt("tab", getActionBar().getSelectedNavigationIndex());
      }
  
      public static class TabListener&lt;T extends Fragment&gt; implements
              ActionBar.TabListener {
          private final Activity mActivity;
          private final String mTag;
          private final Class&lt;T&gt; mClass;
          private final Bundle mArgs;
          private Fragment mFragment;
  
          public TabListener(Activity activity, String tag, Class&lt;T&gt; clz) {
              this(activity, tag, clz, null);
          }
  
          public TabListener(Activity activity, String tag, Class&lt;T&gt; clz,
                  Bundle args) {
              mActivity = activity;
              mTag = tag;
              mClass = clz;
              mArgs = args;
  
              // Check to see if we already have a fragment for this tab,
              // probably from a previously saved state. If so, deactivate
              // it, because our initial state is that a tab isn't shown.
              mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag);
              if (mFragment != null &amp;&amp; !mFragment.isDetached()) {
                  FragmentTransaction ft = mActivity.getFragmentManager()
                          .beginTransaction();
                  ft.detach(mFragment);
                  ft.commit();
              }
          }
  
          public void onTabSelected(Tab tab, FragmentTransaction ft) {
              if (mFragment == null) {
                  mFragment = Fragment.instantiate(mActivity, mClass.getName(),
                          mArgs);
                  ft.add(android.R.id.content, mFragment, mTag);
              } else {
                  ft.attach(mFragment);
              }
          }
  
          public void onTabUnselected(Tab tab, FragmentTransaction ft) {
              if (mFragment != null) {
                  ft.detach(mFragment);
              }
          }
  
          public void onTabReselected(Tab tab, FragmentTransaction ft) {
              Toast.makeText(mActivity, "Reselected!", Toast.LENGTH_SHORT)
                           .show();
          }
      }
  
  }
  </code></pre>
  
  <p><strong>main.xml</strong></p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical" &gt;
  
      &lt;fragment
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/mapFragment"
          android:name="com.google.android.gms.maps.MapFragment"
          android:layout_width="match_parent"
          android:layout_height="match_parent" /&gt;
  &lt;/LinearLayout&gt;
  </code></pre>
  
  <p><strong>relevant class ( MapFragment.java )</strong></p>
  
  <pre><code>package com.nfc.demo;
  
  import android.app.Fragment;
  import android.os.Bundle;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  
  public class MapFragment extends Fragment {
  
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
              Bundle savedInstanceState) {
          super.onCreateView(inflater, container, savedInstanceState);
          return inflater.inflate(R.layout.main, container, false);
      }
  
      public void onDestroy() {
          super.onDestroy();
      }
  }
  </code></pre>
  
  <p><strong>error</strong> </p>
  
  <pre><code>android.view.InflateException: Binary XML file line #7: 
       Error inflating class fragment
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
     at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
     at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
     at com.nfc.demo.MapFragment.onCreateView(MapFragment.java:15)
     at android.app.Fragment.performCreateView(Fragment.java:1695)
     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)
     at android.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1255)
     at android.app.BackStackRecord.run(BackStackRecord.java:672)
     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)
     at android.os.Handler.handleCallback(Handler.java:725)
     at android.os.Handler.dispatchMessage(Handler.java:92)
     at android.os.Looper.loop(Looper.java:137)
     at android.app.ActivityThread.main(ActivityThread.java:5039)
     at java.lang.reflect.Method.invokeNative(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:511)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
     at dalvik.system.NativeStart.main(Native Method)
  
  Caused by: java.lang.IllegalArgumentException: 
       Binary XML file line #7: Duplicate id 0x7f040005, tag null, or 
       parent id 0xffffffff with another fragment for 
       com.google.android.gms.maps.MapFragment
     at android.app.Activity.onCreateView(Activity.java:4722)
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
     ... 19 more
  </code></pre>