1

I'm trying to implement tabs for navigation in an Android app using this tutorial from Krishnabhadra

Tab1 -> Frag1 -> Frag2

Tab2 -> Frag3

Tab3 -> Frag4

Everything works fine with the scenario like this, but when I change Frag2 view to Google maps:

Navigate from Frag1 -> Frag3 or Frag4 -> Back to Frag1: works just fine

Navigate from Frag1 -> Frag2 (now is Google maps) -> Frag3 or Frag4 or back to Frag1: works just fine until I navigate back to Frag2 again then problem occurs

Everything is quiet the same as in the tutorial except the layout for the maps fragment

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <FrameLayout
        android:id="@+id/mapFrame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <fragment
            android:id="@+id/shopsMaps_map"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            class="com.google.android.gms.maps.SupportMapFragment" />

        <ImageButton
            android:id="@+id/myMapLocationButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|left"
            android:layout_marginBottom="10dp"
            android:layout_marginLeft="10dp"
            android:background="@drawable/track_icon"
            android:contentDescription="My Location" />
    </FrameLayout>

</LinearLayout>

Here is the full stack trace

10-25 11:09:35.690: E/AndroidRuntime(25923): FATAL EXCEPTION: main
10-25 11:09:35.690: E/AndroidRuntime(25923): android.view.InflateException: Binary XML file line #11: Error inflating class fragment
10-25 11:09:35.690: E/AndroidRuntime(25923):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:710)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:760)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at com.arunsawad.shoplomo.tab.ShopsMaps.onCreateView(ShopsMaps.java:42)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at android.os.Handler.handleCallback(Handler.java:615)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at android.os.Handler.dispatchMessage(Handler.java:92)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at android.os.Looper.loop(Looper.java:137)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at android.app.ActivityThread.main(ActivityThread.java:4947)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at java.lang.reflect.Method.invokeNative(Native Method)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at java.lang.reflect.Method.invoke(Method.java:511)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at dalvik.system.NativeStart.main(Native Method)
10-25 11:09:35.690: E/AndroidRuntime(25923): Caused by: java.lang.IllegalArgumentException: Binary XML file line #11: Duplicate id 0x7f06002a, tag null, or parent id 0x0 with another fragment for com.google.android.gms.maps.SupportMapFragment
10-25 11:09:35.690: E/AndroidRuntime(25923):    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:290)
10-25 11:09:35.690: E/AndroidRuntime(25923):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:682)
10-25 11:09:35.690: E/AndroidRuntime(25923):    ... 20 more

Any help will be appreciated

Community
  • 1
  • 1
Kent
  • 2,952
  • 2
  • 25
  • 42

1 Answers1

1

You are trying to use nested fragments in a way that is not supported by the framework.

Instead of what you are doing now you have to use getChildFragmentManager() to add SupportMapFragment via code and not through xml.

Read on nested fragments and take a look at my answer here.

Community
  • 1
  • 1
MaciejGórski
  • 22,187
  • 7
  • 70
  • 94