android.view.InflateException: Binary XML file line #33: Error inflating class fragment

Posted

技术标签:

【中文标题】android.view.InflateException: Binary XML file line #33: Error inflating class fragment【英文标题】: 【发布时间】:2015-05-01 03:04:57 【问题描述】:

如果我的 Google 地图应用程序出现问题,我会遇到一些问题。我的应用程序中有三个按钮; “打开谷歌地图”、“相机”和“触摸”。当应用程序启动它直接进入谷歌地图屏幕时,一切正常,直到此时,但当用户在谷歌地图屏幕上并再次点击谷歌地图按钮时,应用程序崩溃,我的 logcat 中出现以下错误;

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): 
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)

它说我在第 33 行的 xml 文件中有错误,但根据我的经验和我从网上搜索中发现的内容,这就是我想使用 Google 地图的方式;

我的带有谷歌地图代码的 xml 文件;

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

另外,我正在处理片段。所以我无法扩展 Activity、FragmentActivity 等。

public class GoogleMapsFragment extends Fragment 
 .....

有什么办法可以解决这个问题,谢谢。

【问题讨论】:

您已经有一个片段(扩展片段),然后在您的 xml 中您有一个片段。这就是为什么 重复 id 0x7f090035、标签 null 或父 id 0x0 与 com.google.android.gms.maps.SupportMapFragment 的另一个片段。检查这个***.com/questions/20919048/… 嗨 Rghunandan 我已经在那个帖子上尝试过制作 mapView 但我仍然遇到同样的错误,但我会再试一次。 你可能做错了。那篇文章应该有帮助 【参考方案1】:

根据您的 logcat 输出,您似乎添加了相同的 Fragment 两次。这会导致IllegalStateExceptionIllegalArgumentException

解决方案是首先检查当前在前台是哪个Fragment,如果已经存在则避免添加相同的Fragment

Fragment f = (Fragment)getFragmentManager().findFragmentByTag("xyz_fragment");
if (f!=null && !f.isVisible() && !f.isAdded()) 

    ....


【讨论】:

我要删除 Destroy 上的 FragmentManager.remove() 吗? 我在 .remove 上收到此错误 - 对于 FragmentManager 类型,方法 remove() 未定义 @Mikey:抱歉,我在想 FragmentTransaction.replace()。请查看编辑后的答案 谢谢 Zygotelnit,我现在就试试。对于 xyz_fragment,我需要参考我的谷歌地图吗?例如片段 f = (Fragment)getFragmentManager().findFragmentByTag("googlemap"); 这取决于您如何添加Fragment ...如果您使用带有标签“googlemap”的FragmentTransaction.add()方法,那么是的,您当然可以使用Fragment f = (Fragment)getFragmentManager().findFragmentByTag("googlemap");

以上是关于android.view.InflateException: Binary XML file line #33: Error inflating class fragment的主要内容,如果未能解决你的问题,请参考以下文章