Xamarin FindViewById返回null

嗨,大家好,我需要一些建议。 我试图使用Xamarin创建一个Android应用程序,所以C#。 我做了两个布局,在每一个布局中,我制作了两个按钮来在它们之间导航。我试过这样:

using System; using Android.App; using Android.OS; using Android.Views; using Android.Widget; namespace Example { [Activity(Label = "Example", MainLauncher = true, Icon = "@drawable/icon")] public class MainActivity : Activity { protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); this.SetContentView(Resource.Layout.Main); this.FindViewById

但每当我启动应用程序时,我都会得到这样的错误:System.NullReferenceException已被抛出。对象引用未设置为对象的实例。 任何建议或更好的主意?

您将Main设置为活动的布局,然后在以下代码行中,您要求在运行时找到名为Back的按钮,该按钮不是此布局的一部分。 这意味着以下行将返回null:

 FindViewById 

现在,如果你执行FindViewById ,你肯定会得到一个System.NullReferenceException

编辑:

鉴于评论,您应该采取以下措施来实现您的目标:

创建两个不同的活动( Main1Main2 )。 在Main1你做:

  protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); this.SetContentView(Resource.Layout.Main); this.FindViewById 

然后在Main2 ,您执行以下操作:

  protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); this.SetContentView(Resource.Layout.Main2); this.FindViewById 

因为它刚刚发生在我身上并几乎把我推到了墙上,这是FindViewById可以返回null以及如何修复它的另一种方式。 可能不是一个更有经验的Android开发人员可能犯的错误,但是,它可能会阻止像我这样的人在未来受到一些挫折。

我的情况

  • 我的控件是在正确的视图(不是片段),ID被正确分配,几天前,当我上次参与项目时,所有东西都可以工作。

  • 构建项目后,在主视图的OnCreate的第一个FindViewById调用在物理设备上运行时突然返回null

  • 事实certificate,我刚刚通过Android SDK Manager运行了一些更新,它向我的系统引入了一个新的Android版本(在本例中为Android 7),而我的设备根本没有安装该版本。

解决方案

  • 在我的Android项目的属性中,“使用Android版编译”下拉菜单设置为“使用最新平台”,现在指向新安装的Android 7 – 只需将其设置为在我的测试中运行的Android版本device(在我的例子中为6)并重新编译修复了null返回值。

TL; DR检查您正在编译的Android版本是否实际上受到您正在测试的设备的支持。

你得到一个NullReferenceException因为这段代码:

FindViewById

返回null 。 这可能是由以下原因引起的:

  • 1 – 你没有使用android:id属性正确地注释Button ,如下所示:

      

– 要么 –

  • 2 – Button未在Main布局中定义,因此它不是Activity的当前视图的一部分。 因此FindViewById()方法找不到它。 Android不支持您切换屏幕的方法。

    这导致了对Android上“切换屏幕”的正确方法的更长解释: 在简单活动之间导航

尝试其中一种解决方案。