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
两次。这会导致IllegalStateException
或IllegalArgumentException
。
解决方案是首先检查当前在前台是哪个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的主要内容,如果未能解决你的问题,请参考以下文章