Android - 二进制 XML 文件第 11 行:膨胀 class <unknown> 时出错

Android - Binary XML file line #11: Error inflating class <unknown>

不确定为什么会给我这个错误。 XML 非常简单,我只有一个 class 来分配对象。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment
        android:id="@+id/mapview"
        android:name="com.testapp.app.custom.CustomMap"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight='4' />
    <ImageView
        android:id="@+id/map_pin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/nav_location_start"
        android:layout_marginBottom="25dp"
        android:layout_gravity="center"
        android:scaleType="center"/>
</FrameLayout>

Class

public class MapPinView extends FrameLayout {

   public SupportMapFragment getMapView() {
       return mapView;
   }

   public void setMapView(SupportMapFragment mapView) {
       this.mapView = mapView;
   }

   SupportMapFragment mapView;
   private ImageView mapPin;

   public MapPinView(Context context, AttributeSet attrs) {
       super(context, attrs);

       LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
       View linearLayout = layoutInflater.inflate(R.layout.mapview_pin_layout, this);

       this.mapPin = (ImageView) linearLayout.findViewById(R.id.map_pin);
   }

   public ImageView getMapPin() {
       return mapPin;
   }

   public void setMapPin(ImageView mapPin) {
       this.mapPin = mapPin;
   }
}

它在图像视图 xml 的第 11 行崩溃。从其他帖子来看,大多数人都遇到过内存不足错误,但我还没有看到该错误。感谢任何帮助。

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.testapp.app/com.testapp.app.menu.MainDrawerActivity}: android.view.InflateException: Binary XML file line #11: Error inflating class <unknown>
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2661)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
       at android.app.ActivityThread.access0(ActivityThread.java:172)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:145)
       at android.app.ActivityThread.main(ActivityThread.java:5835)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
Caused by android.view.InflateException: Binary XML file line #11: Error inflating class <unknown>
       at android.view.LayoutInflater.createView(LayoutInflater.java:640)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
       at com.testapp.app.menu.main_map.MapViewFragment.onCreate(MapViewFragment.java:821)
       at android.support.v4.app.Fragment.performCreate(Fragment.java:1766)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:917)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
       at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
       at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
       at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551)
       at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1234)
       at android.app.Activity.performStart(Activity.java:6258)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2624)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
       at android.app.ActivityThread.access0(ActivityThread.java:172)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:145)
       at android.app.ActivityThread.main(ActivityThread.java:5835)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
Caused by java.lang.reflect.InvocationTargetException
       at java.lang.reflect.Constructor.newInstance(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
       at android.view.LayoutInflater.createView(LayoutInflater.java:614)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
       at com.testapp.app.menu.main_map.MapViewFragment.onCreate(MapViewFragment.java:821)
       at android.support.v4.app.Fragment.performCreate(Fragment.java:1766)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:917)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
       at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
       at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
       at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551)
       at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1234)
       at android.app.Activity.performStart(Activity.java:6258)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2624)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
       at android.app.ActivityThread.access0(ActivityThread.java:172)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:145)
       at android.app.ActivityThread.main(ActivityThread.java:5835)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
Caused by android.view.InflateException: Binary XML file line #5: Error inflating class fragment
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:770)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
       at com.testapp.app.custom.MapPinView.<init>(MapPinView.java:36)
       at java.lang.reflect.Constructor.newInstance(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
       at android.view.LayoutInflater.createView(LayoutInflater.java:614)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
       at com.testapp.app.menu.main_map.MapViewFragment.onCreate(MapViewFragment.java:821)
       at android.support.v4.app.Fragment.performCreate(Fragment.java:1766)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:917)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
       at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
       at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
       at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551)
       at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1234)
       at android.app.Activity.performStart(Activity.java:6258)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2624)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
       at android.app.ActivityThread.access0(ActivityThread.java:172)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:145)
       at android.app.ActivityThread.main(ActivityThread.java:5835)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
Caused by java.lang.IllegalArgumentException: Binary XML file line #5: Duplicate id 0x7f0b0124, tag null, or parent id 0x0 with another fragment for com.testapp.app.custom.CustomMap
       at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2175)
       at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:300)
       at android.support.v7.app.AppCompatDelegateImplV7.callActivityOnCreateView(AppCompatDelegateImplV7.java:838)
       at android.support.v7.app.AppCompatDelegateImplV11.callActivityOnCreateView(AppCompatDelegateImplV11.java:34)
       at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:826)
       at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:732)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
       at com.testapp.app.custom.MapPinView.<init>(MapPinView.java:36)
       at java.lang.reflect.Constructor.newInstance(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
       at android.view.LayoutInflater.createView(LayoutInflater.java:614)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
       at com.testapp.app.menu.main_map.MapViewFragment.onCreate(MapViewFragment.java:821)
       at android.support.v4.app.Fragment.performCreate(Fragment.java:1766)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:917)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
       at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
       at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
       at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551)
       at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1234)
       at android.app.Activity.performStart(Activity.java:6258)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2624)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
       at android.app.ActivityThread.access0(ActivityThread.java:172)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:145)
       at android.app.ActivityThread.main(ActivityThread.java:5835)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)

您在片段处理中做了一些不可接受的事情。看看这个documentation.

Note: You cannot inflate a layout into a fragment when that layout includes a <fragment>. Nested fragments are only supported when added to a fragment dynamically.

您应该通过调用 getChildFragmentManager()

以编程方式添加片段

这是同一文档中的示例:

Fragment videoFragment = new VideoPlayerFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.video_fragment, videoFragment).commit();