声明Button Click时出错 - Android C#Xamarin

时间:2017-05-23 14:46:56

标签: c# android xamarin error-handling click

我正在尝试为Click事件声明ImageButton,但会给出错误。 什么会给出这个错误?

btnSettingsBack.Click += btnSettingsBack_Click;

出现错误

MainActivity Code(OnCreate):

    ImageButton btnSettings = FindViewById<ImageButton>(Resource.Id.btnSettings);
    ImageButton btnSettingsBack = FindViewById<ImageButton>(Resource.Id.btnSettingsBack);
    btnAdd = FindViewById<Button>(Resource.Id.btnAdd);
    lvNotes = FindViewById<ListView>(Resource.Id.lvNotes);
   dbHelper = new DbHelper(this);

    //Load Data
    LoadNoteList();

    btnAdd.Click += BtnAdd_Click;

    btnSettings.Click += BtnSettings_Click;

    btnSettingsBack.Click += BtnSettingsBack_Click;

}

错误:

Error Image

更新1: Settings.axml布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff"
    android:minWidth="25px"
    android:minHeight="25px">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:id="@+id/linearLayout1"
        android:padding="20px"
        android:background="#22A7F0">
        <ImageButton
            android:src="@drawable/menu_back"
            android:background="#22A7F0"
            android:layout_weight="0.6"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="30px"
            android:id="@+id/btnSettingsBack"
            android:layout_gravity="center" />

更新2: OnCreate代码

protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);
            ActionBar.Hide();



            ImageButton btnSettings = FindViewById<ImageButton>(Resource.Id.btnSettings);
            ImageButton btnSettingsBack = FindViewById<ImageButton>(Resource.Id.btnSettingsBack);
            btnAdd = FindViewById<Button>(Resource.Id.btnAdd);
            lvNotes = FindViewById<ListView>(Resource.Id.lvNotes);
           dbHelper = new DbHelper(this);

            //Load Data
            LoadNoteList();

            btnAdd.Click += BtnAdd_Click;

            btnSettings.Click += BtnSettings_Click;

            btnSettingsBack.Click += BtnSettingsBack_Click;

        }

1 个答案:

答案 0 :(得分:1)

您将活动的contentView设置为名为 Main.axml

的文件
SetContentView(Resource.Layout.Main);

但您在另一个名为 Settings.axml

的文件中定义了ImageButton

这就是为什么btnSettingsBack为空并因此错误。

这些控件中的每一个都必须存在于您设置为页面的ContentView的布局中。如果其中任何一个不存在,则在尝试访问它时会出现NullReferenceException。

ImageButton btnSettings = FindViewById<ImageButton>(Resource.Id.btnSettings);
ImageButton btnSettingsBack = FindViewById<ImageButton>(Resource.Id.btnSettingsBack);
btnAdd = FindViewById<Button>(Resource.Id.btnAdd);

FindViewById视为使用您传递的ResourceId查询您为Activity提供的布局的一种方式。如果ID不存在,则此方法不会投诉,但它将返回Null,因此我们的工作是确保您传递的每个Id都是您正在设置的布局的一部分。