Android - 重新膨胀 fragment 会导致 "Error inflating class fragment"

标签 android google-maps android-layout android-fragments

我是 Android 开发新手,但已经遇到了大麻烦。我在这里和其他网站上阅读了有关类似甚至相同问题的多个主题。但我找到的所有答案都不符合我的需要,或者根本不适合我。

所以事情是这样的。我有一个带有自制“菜单”层的 Activity,其中包括位于 Activity 底部的 3 个按钮和上面的 ScrollView。现在,单击其中一个按钮时,我只需使用

将 fragment 填充到 ScrollView 中
svContent.removeAllViews();
getLayoutInflater().inflate(R.layout.fragment_xyz, (ScrollView) findViewById(R.id.svContent));

充气得很好。

现在,膨胀的 fragment 包括 Google map (API 2) 的另一个 fragment ,如下所示。

<fragment
    android:id="@+id/fMap"
    android:name="com.google.android.gms.maps.MapFragment"
    android:layout_width="fill_parent"
    android:layout_height="150dp" />

该 fragment 也按照我想要的父 fragment 膨胀方式填充,并且 map 工作正常。

现在,我单击另一个菜单按钮以使另一个 fragment 膨胀。但是当我再次单击第一个 fragment 的按钮时,出现以下错误:

Duplicate id xxxxx, tag null, or parent id xxxxx with another fragment for com.google.android.gms.maps.MapFragment

就像我说的,我尝试了在网上找到的几种解决方案,包括

  • 从扩展 Fragment 转向 FragmentActivity
  • 使用 SupportMapFragment 代替 Fragment
  • 通过代码而不是 XML 扩展子 fragment (Google map fragment )

所有这些都有一些我目前无法接受的缺点(至少我认为)或者对我或我的星座“不起作用”

非常感谢任何帮助。如果您需要更多信息,请告诉我。

问候, D.

最佳答案

替换 ScrollView 中的 fragment :

    SupportMapFragment mapFragment = MapFragment.newInstance();
    FragmentTransaction ft = getChildFragmentManager().beginTransaction();
    ft.replace(R.id.svContent, _mapFragment );
    ft.commit();

如果您想使用后退按钮返回到上一个 fragment ,请在提交之前添加 ft.addToBackStack(null);

就是这样。 顺便说一句,您可能不应该使用 ScrollView 作为 fragment 的容器。如果内容必须可滚动,请将滚动条放入 fragment 中,并将 fragment 放入 LinearLayout/FrameLayout/RelativeLayout 中。

关于Android - 重新膨胀 fragment 会导致 "Error inflating class fragment",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25817124/

相关文章:

java - 动态构建类并将它们添加到 ArrayAdapter

java - contentResolver 和 ContentObserver 的区别

android - 找不到 com 的提供商信息。 google.android.gsf.gservices 无法加载 map 。无法联系谷歌服务器

android - 如何在 ExpandableRecyclerView 中更改颜色

android - 为什么在隐藏的 fragment 中调用 onResume()?

android - 应用程序在某些移动设备上无法运行

Python Flask GoogleMaps获取用户当前位置经纬度

Android:根据颜色检查谷歌地图标记是否存在

android - Activity 的背景图片

java - 如何使按钮在单击时重新出现在不同的位置?