问题
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
回答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.
来源:https://stackoverflow.com/questions/19581034/display-google-maps-in-tab-using-fragmenttabhost