该应用在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" />
答案 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。