安卓应用错误 - 重复的id 0x7f04000f,标签为空或父级id 0x0与另一个com.google.android.gms.maps.SupportMapFragment片段重复。

6

我正在尝试制作一个简单的安卓应用程序,但是在修复这个 bug 的过程中遇到了困难。

该应用程序具有 4 个标签页的固定按钮导航,当在第四个标签页并切换到另一个标签页时会出现错误。在任何其他页面都可以正常工作,但每次都会在第四个标签页上引发致命错误。该页面上除了一个 TextView 元素以外没有任何东西。是否有人能帮助我找出问题所在或指点我正确的方向?

02-17 21:48:54.378: E/AndroidRuntime(5543): FATAL EXCEPTION: main
02-17 21:48:54.378: E/AndroidRuntime(5543): android.view.InflateException: Binary XML file line #12: Error inflating class fragment
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at com.example.testthree.MainActivity$MapSectionFragment.onCreateView(MainActivity.java:241)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.support.v4.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1264)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:672)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.support.v4.view.ViewPager.populate(ViewPager.java:1012)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:523)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:495)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:476)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at com.example.testthree.MainActivity.onTabSelected(MainActivity.java:95)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at com.android.internal.app.ActionBarImpl.selectTab(ActionBarImpl.java:570)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at com.android.internal.app.ActionBarImpl$TabImpl.select(ActionBarImpl.java:1067)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at com.android.internal.widget.ScrollingTabContainerView$TabClickListener.onClick(ScrollingTabContainerView.java:489)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.view.View.performClick(View.java:4084)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.view.View$PerformClick.run(View.java:16966)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.os.Handler.handleCallback(Handler.java:615)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.os.Looper.loop(Looper.java:137)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.app.ActivityThread.main(ActivityThread.java:4745)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at java.lang.reflect.Method.invokeNative(Native Method)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at java.lang.reflect.Method.invoke(Method.java:511)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at dalvik.system.NativeStart.main(Native Method)
02-17 21:48:54.378: E/AndroidRuntime(5543): Caused by: java.lang.IllegalArgumentException: Binary XML file line #12: Duplicate id 0x7f04000f, tag null, or parent id 0x0 with another fragment for com.google.android.gms.maps.SupportMapFragment
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:285)
02-17 21:48:54.378: E/AndroidRuntime(5543):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676)
02-17 21:48:54.378: E/AndroidRuntime(5543):     ... 30 more
2个回答

44

我在我的地图片段中使用以下代码进行修复:

public void onDestroyView() {
    super.onDestroyView();
    FragmentManager fm = getActivity().getSupportFragmentManager();
    Fragment fragment = (fm.findFragmentById(R.id.map));
    FragmentTransaction ft = fm.beginTransaction();
    ft.remove(fragment);
    ft.commit();
}

1
谢谢你今天救了我 :), 但是能否请你解释一下问题是什么呢?+1 - Syed Raza Mehdi
1
哇,谢谢!这节省了我很多时间和烦恼... - Woody
1
@Derek,感谢你的回答,它帮助我修复了崩溃问题。有趣的是,在几天前我更新了appcompat-v7支持库到21版本(使用Material Design),原来的错误消失了,不再需要重写onDestroyView()方法。看起来这个崩溃是由旧版本的支持库中的一个bug引起的,而Google在v21中已经修复了它。 - Anton Cherkashyn
3
最好使用 ft.commitAllowingStateLoss();,因为在 onSaveInstanceState 之后你不能提交更改。 - MineConsulting SRL
我曾经使用过这个响应,但有时会导致应用程序崩溃。使用这个新的响应后,完美地解决了问题而不会出现崩溃。如果您遇到问题,请参考此链接:https://dev59.com/Huo6XIcBkEYKwwoYOR0q#33335835 - Emmanuelguther

2

虽然我不是标签页方面的专家,但似乎这是与地图/地图碎片有关的问题。

您是否在所有标签页中多次包含了地图?

建议确保添加的所有碎片(和地图碎片)的id都是唯一的。

如果您不使用某些碎片,则将其移除可能会有所帮助,以减少冲突的可能性。这类似于删除当前未显示的标签页内的碎片。但就像我说的,我并非标签页方面的专家。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接