我有一个按钮,点击后应调用方法。该程序将构建,但我在调用该方法时收到运行时错误System.NullReferenceException。该方法如何为空?例外情况发生在评论行。
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
_countdown = (TextView)FindViewById(Resource.Id.countdown);
Button buttonStop = FindViewById<Button>(Resource.Id.stopButton);
//exception happens below
buttonStop.Click += stopButton_Click;
Button buttonSet = FindViewById<Button>(Resource.Id.setButton);
buttonSet.Click += setButton_Click;
Button buttonClear = FindViewById<Button>(Resource.Id.clearButton);
buttonClear.Click += clearButton_Click;
var back = FindViewById<Button>(Resource.Id.buttonBack);
back.Click += (sender, e) =>
{
StartActivity(typeof(DM_App_Code_Fragment.MainScreen));
};
...
}
这是要调用的方法。
private void stopButton_Click(object sender, EventArgs e)
{
StopTimer();
}
private void StopTimer()
{
_timer.Enabled = false;
}
这是与_timer相关的代码
//initialization
private System.Timers.Timer _timer = new System.Timers.Timer();
以下代码出现在OnCreate方法中。
_timer.Interval = 1000;
_timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
_timer.Enabled = false;
这也是一个包含两个Resource.Designer.cs文件的小组工作。文件中有两个:一个在Resource.Designer.cs中,另一个在Resource.DesignerQT.cs中,所以我注释掉其中一个,因为我收到错误重复“global :: Android.Runtime.ResourceDesignerAttribute”属性。现在我认为这就是按钮为空的原因,因为资源文件未正确加载。有没有办法在项目中有两个Resource.Designer.cs文件或只允许一个?
[assembly:global::Android.Runtime.ResourceDesignerAttribute("QuickTimer.Resource",
IsApplication=true)]
这是xml布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:text="Quick Timer"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textViewQuickTimer" />
<TextView
android:text="Hour"
android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_below="@id/textViewQuickTimer"
android:layout_marginLeft="50dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:id="@+id/textViewHours" />
<TextView
android:text="Min"
android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_alignBaseline="@id/textViewHours"
android:layout_alignBottom="@id/textViewHours"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textViewMinutes" />
<TextView
android:text="Sec"
android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_alignBaseline="@id/textViewMinutes"
android:layout_alignBottom="@id/textViewMinutes"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="60dp"
android:id="@+id/textViewSeconds" />
<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/textViewHours"
android:prompt="@string/hours"
android:layout_marginLeft="34dp"
android:id="@+id/spinnerHours" />
<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/textViewMinutes"
android:layout_marginLeft="130dp"
android:prompt="@string/minutes"
android:id="@+id/spinnerMinutes" />
<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/textViewSeconds"
android:layout_marginLeft="220dp"
android:prompt="@string/seconds"
android:id="@+id/spinnerSeconds" />
<Button
Click="setButton_Click"
android:text="Set Timer / Start"
android:layout_marginTop="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/spinnerMinutes"
android:id="@+id/setButton"
android:layout_marginLeft="95dp"
android:clickable="true" />
<TextView
android:text="Timer Countdown"
android:layout_marginLeft="100dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/setButton"
android:id="@+id/countdown" />
<Button
Click="stopButton_Click"
android:text="Stop"
android:id="@+id/stopButton"
android:layout_below="@id/countdown"
android:layout_marginLeft="65dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
Click="clearButton_Click"
android:text="Clear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="205dp"
android:layout_below="@id/countdown"
android:id="@+id/clearButton" />
<Button
android:text="Back"
android:layout_marginTop="35dp"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/clearButton"
android:id="@+id/buttonBack" />
</RelativeLayout>
答案 0 :(得分:0)
在方法名称之前,似乎还有一个空间。
另外,您可以内联 StopTimer 方法。
答案 1 :(得分:0)
您可能过早地调用FindViewById,这就是它返回null引用的原因。 (等到onFinishInflate()完成)
对于类似的SO问题,请查看here