Android视图膨胀异常:二进制XML文件第33行:错误膨胀类片段。

4

我在使用谷歌地图应用程序时遇到了一些问题。 我的应用程序中有三个按钮:“打开谷歌地图”,“相机”和“触摸”。 当应用程序启动时,它直接进入谷歌地图屏幕,在这一点上一切都很正常,但当用户在谷歌地图屏幕上单击谷歌地图按钮时,应用程序崩溃,并在我的日志中出现以下错误;

02-28 11:39:25.844: E/AndroidRuntime(2782): FATAL EXCEPTION: main
02-28 11:39:25.844: E/AndroidRuntime(2782): Process: com.GoogleMapsapplication.main, PID: 2782
02-28 11:39:25.844: E/AndroidRuntime(2782): android.view.InflateException: Binary XML file line #33: Error inflating class fragment
02-28 11:39:25.844: E/AndroidRuntime(2782):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at com.augmentedthorpepark.main.FragmentGoogleMap.onCreateView(GoogleMapsFragment.java:50)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at android.app.Fragment.performCreateView(Fragment.java:1700)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at android.app.BackStackRecord.run(BackStackRecord.java:684)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at android.os.Handler.handleCallback(Handler.java:733)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at android.os.Handler.dispatchMessage(Handler.java:95)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at android.os.Looper.loop(Looper.java:136)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at android.app.ActivityThread.main(ActivityThread.java:5146)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at java.lang.reflect.Method.invokeNative(Native Method)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at java.lang.reflect.Method.invoke(Method.java:515)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at dalvik.system.NativeStart.main(Native Method)
02-28 11:39:25.844: E/AndroidRuntime(2782): Caused by: java.lang.IllegalArgumentException: Binary XML file line #33: Duplicate id 0x7f090035, tag null, or parent id 0x0 with another fragment for com.google.android.gms.maps.SupportMapFragment
02-28 11:39:25.844: E/AndroidRuntime(2782):     at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:290)
02-28 11:39:25.844: E/AndroidRuntime(2782):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)

它说我的xml文件在第33行出现错误,但从我的经验和我在网上搜索到的内容来看,这才是我应该使用Google Maps的方法;

我的XML文件中包含Google地图代码;

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

另外,我正在使用片段(Fragment)进行开发。所以我无法扩展Activity、FragmentActivity等类。

public class GoogleMapsFragment extends Fragment {
 .....
}

有没有什么方法可以解决这个bug,谢谢。


你已经有一个片段(扩展片段)然后在你的xml中你有一个片段。这就是为什么会出现Duplicate id 0x7f090035,tag null,或parent id 0x0与com.google.android.gms.maps.SupportMapFragment的另一个片段重复的错误。请查看https://dev59.com/TWEi5IYBdhLWcg3w0fFR。 - Raghunandan
嗨,Rghunandan,我已经看过那篇帖子并尝试创建了mapView,但我仍然遇到相同的错误,不过我会再试一次。 - Mikey
你可能做错了。这篇文章应该会有所帮助。 - Raghunandan
1个回答

1
根据您的logcat输出,似乎您正在两次添加相同的“Fragment”。这会导致IllegalStateExceptionIllegalArgumentException。解决方法是首先检查当前前景中哪个“Fragment”,如果已经存在,则避免再次添加相同的“Fragment”:
Fragment f = (Fragment)getFragmentManager().findFragmentByTag("xyz_fragment");
if (f!=null && !f.isVisible() && !f.isAdded()) {

    ....

}

我在 onDestroy() 方法中需要移除 FragmentManager.remove() 吗? - Mikey
我在 .remove() 上遇到了这个错误 - 类型 FragmentManager 没有定义 remove() 方法。 - Mikey
@Mikey:抱歉,我想到的是FragmentTransaction.replace()。请查看已编辑的答案。 - Yash Sampat
谢谢Zygotelnit,我现在会尝试一下。对于xyz_fragment,我需要引用我的Google地图吗?例如:Fragment f =(Fragment)getFragmentManager()。findFragmentByTag(“googlemap”); - Mikey
我没有使用任何标签,而是使用了这个.findFragmentById(R.id.googlemap)).getMap()。 - Mikey
显示剩余5条评论

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