在 Xamarin 中膨胀类 android.support.design.widget.Coordinator 时出错

Posted

技术标签:

【中文标题】在 Xamarin 中膨胀类 android.support.design.widget.Coordinator 时出错【英文标题】:Error inflating class android.support.design.widget.Coordinator in Xamarin 【发布时间】:2019-09-22 16:03:24 【问题描述】:

我收到一条错误消息,内容如下:

android.Views.InflateException: 'Binary XML file line #1: Binary XML file line #2: Error inflating class android.support.design.widget.Coordinator'

调试器在SetContentView(Resource.Layout.activity_main); 上运行和中断。 我目前正在使用 Visual Studio 16.3.0 预览版 3,因为我遇到了当前发布版本的问题,在此预览版中有 Xamarin android 错误修复。

当我从 activity_main.axml 中删除 <include layout="@layout/include_main"/> 时,我得到一个错误提示

System.NullReferenceException: '对象引用未设置为对象的实例。'

在 MainActivity.cs 中的 SupportActionBar.Title = "";

MainActivity.cs

using Android.App;
using Android.OS;
using Android.Support.V7.App;
using Android.Runtime;
using Android.Widget;
using System;
using Firebase.Database;
using Firebase;
using Android.Views;

namespace PaleteroGo

    [Activity(Label = "@string/app_name", Theme = "@style/PaleteroTheme", MainLauncher = false)]
    public class MainActivity : AppCompatActivity
    
        FirebaseDatabase database;
        Android.Support.V7.Widget.Toolbar mainToolbar;
        Android.Support.V4.Widget.DrawerLayout drawerLayout;

        protected override void OnCreate(Bundle savedInstanceState)
        
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.activity_main); //debugger breaks here
            ConnectControl();
        

        void ConnectControl()
        
            drawerLayout = (Android.Support.V4.Widget.DrawerLayout)FindViewById(Resource.Id.drawerLayout);
            mainToolbar = (Android.Support.V7.Widget.Toolbar)FindViewById(Resource.Id.mainToolbar);
            SetSupportActionBar(mainToolbar);
            SupportActionBar.Title = ""; //then breaks here
            Android.Support.V7.App.ActionBar actionBar = SupportActionBar;
            actionBar.SetHomeAsUpIndicator(Resource.Mipmap.ic_help_action);
            actionBar.SetDisplayHomeAsUpEnabled(true);
        

        public override bool OnOptionsItemSelected(IMenuItem item)
        
            switch (item.ItemId)
            
                case Android.Resource.Id.Home:
                    drawerLayout.OpenDrawer((int)GravityFlags.Left);
                    return true;
                default:
                    return base.OnOptionsItemSelected(item);

            
        

        void Initializedatabase()
        
            ...
        

    

activity_main.axml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:id="@+id/drawerLayout"
    android:fitsSystemWindows="true"
    >

    <LinearLayout
        android:orientation="vertical"
        android:layout_
        android:layout_
        >

        <include
        layout="@layout/include_main"

        />

        </LinearLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/navView"
        android:layout_
        android:layout_
        android:background="@color/paleteroWhite"
        android:layout_gravity="start"
        app:headerLayout="@layout/headerlayout"
        app:menu="@menu/navmenu"
        />

</android.support.v4.widget.DrawerLayout>

include_main.xml

<android.support.design.widget.Coordinator 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rootView"
    android:layout_
    android:layout_>

    <FrameLayout
        android:layout_
        android:layout_
        android:background="@color/paleteroAsh"
        >   

        <android.support.v7.widget.Toolbar
            android:layout_
            android:layout_
            android:minHeight="?android:attr/actionBarSize"
            android:id="@+id/mainToolbar"
        />

        </FrameLayout>

</android.support.design.widget.Coordinator>

【问题讨论】:

你能显示你的include_main xaml,它是否包含工具栏?如果没有,你可以像下面这样改变,然后检查它 是的,它确实实现了工具栏。已发布代码。 我也删除了工具栏 xml 代码,但仍然有相同的错误消息。 你试过下面的代码吗?从 include_main xaml 中删除工具栏 是的,这就是我的意思,我从 include_main 中删除了工具栏并尝试了您的代码,但同样的错误。 【参考方案1】:

尝试像这样改变:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   android:orientation="vertical"
   android:layout_
   android:layout_>
  <android.support.v7.widget.Toolbar
       android:minWidth="25dp"
       android:layout_
       android:layout_
       android:minHeight="?attr/actionBarSize"
       android:id="@+id/mainToolbar" />
  <android.support.v4.widget.DrawerLayout
       android:id="@+id/drawerLayout"
       android:layout_
       android:layout_>
    <include
       layout="@layout/include_main"
       android:layout_
       android:layout_ />

   <android.support.design.widget.NavigationView
       android:id="@+id/nav_view"
       android:layout_
       android:layout_
       android:layout_gravity="start"
       app:headerLayout="@layout/headerlayout"
       app:menu="@menu/navmenu"
    />

   </android.support.v4.widget.DrawerLayout>
</LinearLayout>

include_main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_
   android:layout_
   android:orientation="vertical">

        <FrameLayout
           android:id="@+id/fragmentContainer"
           android:layout_
           android:layout_ />

</LinearLayout>

【讨论】:

我决定将actionBar.SetHomeAsUpIndicator(Resource.Mipmap.ic_help_action); 更改为actionBar.SetHomeAsUpIndicator(Resource.Mipmap.ic_menu_action);,并将 ic_menu_action.png 图标添加到 mipmap 文件夹,现在得到类似的错误消息。 Unhandled Exception: Android.Views.InflateException: &lt;Timeout exceeded getting exception details&gt; 09-27 20:23:31.229 W/roGo.PaleteroG( 5103): Checksum mismatch for dex base.apk 09-27 20:23:31.229 W/roGo.PaleteroG( 5103): Could not merge the profile. Clearing the profile data. 在这种情况下也使用 Visual Studio 2017。 我应该一直使用最新的预览版吗?我正在等待更新完成。 没关系,我可以确认它在更新到 Visual Studio 16.4.0 预览版 1 后工作正常。 它看起来像不断来回。原因:android.view.InflateException: Binary XML file line #2: Error inflating class android.support.design.widget.Coordinator ... 而且还引起:java.lang.ClassNotFoundException:在路径上找不到类“android.support.design.widget.Coordinator”:DexPathList [[zip file“/data/app/PaleteroGo .PaleteroGo-OVejOH8Y-YE04grCXVNgBQ==/base.apk"],nativeLibraryDirectories=[/data/app/PaleteroGo.PaleteroGo-OVejOH8Y-YE04grCXVNgBQ==/lib/x86, /data/app/PaleteroGo.PaleteroGo-OVejOH8Y-YE04grCXVNgBQ= =/base.apk!/lib/x86, /system/lib]]

以上是关于在 Xamarin 中膨胀类 android.support.design.widget.Coordinator 时出错的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin Forms Android 错误膨胀类 MaterialCalendarGridView

二进制 XML 文件第 1 行:Xamarin Android 中 Google Maps 的类片段错误膨胀错误

在窗口管理器中膨胀类时出错

在Fabric中膨胀类TextView时出错

在活动映射 xml 中膨胀类片段时出错

InvocationTargetException 在适配器类中膨胀视图