【问题标题】:Android - Binary XML file line #11: Error inflating class <unknown>Android - 二进制 XML 文件第 11 行:膨胀类 <unknown> 时出错
【发布时间】:2015-12-22 16:03:05
【问题描述】:

不知道为什么它给我这个错误。 XML 非常简单,我只有一个分配对象的类。

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

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.access$900(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.access$900(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.access$900(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.access$900(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.access$900(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)

【问题讨论】:

  • 你也可以发布你的 logcat 吗?
  • 您是否在项目中定义了与此布局中的&lt;fragment&gt; 相同的ID 的其他元素?
  • 尝试更改片段 ref 的 id:Duplicate id 0x7f0b0124, tag null, or parent id 0x0 with another fragment for com.testapp.app.custom.CustomMap
  • id 只被调用一次。知道这个类是一个片段是否有帮助?它有可能被创建不止一次吗?片段中的 onCreate 会被多次调用吗?

标签: android android-fragments android-inflate


【解决方案1】:

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

注意:您不能将布局膨胀为片段,当该布局 包括&lt;fragment&gt;。仅在添加时才支持嵌套片段 动态到一个片段。

您应该改为通过调用getChildFragmentManager() 以编程方式添加片段

这是来自同一文档的示例:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    相关资源
    最近更新 更多