Xamarin:无法将Android.Widget.LinearLayout类型的实例转换为Android.Support.V7.Widget.Toolbar类型

时间:2017-07-10 12:35:42

标签: android xamarin xamarin.android xamarin.forms

该应用在Android 6或更低版本上运行。但是当在Android 7(Nougat)上运行时,它会抛出运行时异常。

System.InvalidCastException: Unable to convert instance of type 'Android.Widget.LinearLayout' to type 'Android.Support.V7.Widget.Toolbar'.

错误在Xamarin(Visual Studio 2017)中以下代码抛出:

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    protected override void OnCreate(Bundle bundle)
    {
        ToolbarResource = Resource.Layout.toolbar;
        TabLayoutResource = Resource.Layout.tabs;

        base.OnCreate(bundle); //Runtime error here
        .... Other code ...
    }
}

我已收集所有Nuget套餐的最新更新,但无法确定问题。我在使用Moto G4 +(Android 7.0)进行测试。 有人可以帮忙吗?

修改1:

工具栏的布局如下:(在资源>布局> toolbar.axml下)。当Android 6的App版本发布时,这已经存在。但是现在访问了Android 7问题的应用程序。

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar" 
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

4 个答案:

答案 0 :(得分:0)

通过从https://developer.xamarin.com/guides/android/troubleshooting/resolving-library-installation-errors/下载android_m2repository_r29.zip存储库并使用相同的指令解决它。

我还通过创建一个新的解决方案测试了这个问题,并得到了一些样式“资源未找到错误”。这也是固定的,然后原来的问题也得到了解决。

答案 1 :(得分:0)

我通过清洁整个解决方案并关闭模拟器来解决了这个问题。然后再次部署,它应该可以工作。

答案 2 :(得分:0)

我尝试了 Señor Hernandez 的回答但没有成功,然后意识到我不小心从我的 Android 项目中删除了 Resources/Resource.designer.cs。我本来打算只从磁盘中删除它,希望它在重建时重新生成。它确实得到了重新生成,但这并没有将它添加回项目。这样做(右键单击,包含在项目中)解决了我的问题。

答案 3 :(得分:0)

尝试在不同类型的变量上分配控件(xml 中的 UI 元素)时,会遇到此类错误。当我弄得一团糟并尝试将 EditText 分配给 TextView 变量时,我经常收到此错误,反之亦然,即。

EditText myText = FindViewById<TextView>(Resource.Id.myText);

TextView myText = FindViewById<EditText>(Resource.Id.myText);

我很确定在您的情况下,您正在尝试将 Android.Widget.LinearLayout 分配给 Android.Support.V7.Widget.Toolbar 类型的变量。

我认为在您的情况下,其中一个变量已在您的 xml 中定义为 LinearLayout:

Resource.Layout.toolbar
Resource.Layout.tabs

同时,其中一个变量已在您的 C# 代码中定义为 Toolbar,因此无法进行强制转换:

ToolbarResource 
TabLayoutResource 

如果问题仍然存在,您也可以尝试检查类型 Android.Support.V7.Widget.Toolbar,而可能是您的 xml 或代码中的 Android.Widget.Toolbar。