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(Resource.Id.BackButton)
现在,如果你执行FindViewById
,你肯定会得到一个System.NullReferenceException
。
编辑:
鉴于评论,您应该采取以下措施来实现您的目标:
创建两个不同的活动( Main1
和Main2
)。 在Main1
你做:
protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); this.SetContentView(Resource.Layout.Main); this.FindViewById(Resource.Id.ForwardButton).Click += this.Forward; } public void Forward(object sender, EventArgs e) { this.StartActivity (typeof(Main2)); }
然后在Main2
,您执行以下操作:
protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); this.SetContentView(Resource.Layout.Main2); this.FindViewById(Resource.Id.BackButton).Click += this.Back; } public void Back(object sender, EventArgs e) { this.StartActivity (typeof(Main)); }
因为它刚刚发生在我身上并几乎把我推到了墙上,这是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上“切换屏幕”的正确方法的更长解释: 在简单活动之间导航
尝试其中一种解决方案。