我是 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/