Xamarin.android 通过单击monodroid中axml的按钮设计添加事件?

Xamarin.android 通过单击monodroid中axml的按钮设计添加事件?,xamarin.android,Xamarin.android,是否可以通过单击axml的设计来添加按钮单击事件? 如果是,那怎么办?如果没有,我如何以其他方式添加? 我正在尝试使用VisualStudio2010制作我的第一个应用程序 代码示例 public class Activity1 : Activity { string dbPath = System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "

是否可以通过单击axml的设计来添加按钮单击事件? 如果是,那怎么办?如果没有,我如何以其他方式添加? 我正在尝试使用VisualStudio2010制作我的第一个应用程序

代码示例

public class Activity1 : Activity
{
     string dbPath = System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "tdsl_validation.sqlite");



        private Button login_button;
        private EditText  user;
        private EditText passs;






    protected override void OnCreate(Bundle bundle)
    {
        var ss=dbPath;

         base.OnCreate(bundle);
         user = (EditText)FindViewById(Resource.Id.editText1);
         passs = (EditText)FindViewById(Resource.Id.editText3);
         login_button = (Button)FindViewById(Resource.Id.button1);
         login_button.Click += new EventHandler(button1_Click);
         SetContentView(Resource.Layout.Main);


    }


    private  bool validate_user(string username, string password)
    {
        bool i;
        i = true;
        string str;

        DataTable dt = new DataTable();
        string dbPath1 = System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "tdsl_validation.sqlite");

        SqliteConnection con = new SqliteConnection("Data Source="+ dbPath1);
        str = "select pass from user_detail where user_name='" + username + "' and pass='" + password + "'";
        SqliteCommand cmd = new SqliteCommand(str, con);
        SqliteDataAdapter da = new SqliteDataAdapter(cmd);
        da.Fill(dt);


        if (dt != null)
        {
            if (dt.Rows.Count > 0)
            {
                i = true;

            }
            else
            {
                i = false;
            }

        }
        else
        {
            i = false;
        } 

        return i;

    }





    void button1_Click(object sender, EventArgs e)
    {
        bool i;
         user = (EditText)FindViewById(Resource.Id.editText1);
         passs = (EditText)FindViewById(Resource.Id.editText3);
         i = validate_user(user.Text, passs.Text);

         i = validate_user(user.Text, passs.Text);
         if (i == true)
         {

         }
         else
         {
             Toast.MakeText(this, "Invalid Username or Password", ToastLength.Short).Show();
         }



        // stuff here
    }








}

新的Mono for Android应用程序的默认项目模板包括一个如何处理按钮点击事件的示例。我不相信在目前的设计师中有任何方法可以手工连接起来。使用默认模板中的示例,假设布局中的按钮Main.axml的ID为“MyButton”(@+ID/MyButton)。在活动中,您需要执行以下操作:

首先,声明Main.axml应用作活动的布局:

SetContentView(Resource.Layout.Main);
声明布局后,可以获取布局中元素的引用。这使您可以获得对按钮的引用:

Button button = FindViewById<Button>(Resource.Id.MyButton);
或者,如果希望为单击处理程序使用单独的方法,而不是内联定义它,则可以执行以下操作:

button.Click += ButtonClicked;

private void ButtonClicked(object sender, EventArgs eventArgs)
{
    // handle button click here
}
编辑(基于评论和更新的问题)

如前所述,需要先调用SetContentView(),然后才能调用FindViewById()。SetContentView()告诉Android您希望用于活动的布局,因此在您这样做之前,它不知道在哪里可以找到您的UI元素。将SetContentView()调用移到FindViewById()调用上方,并确保所需布局为Main.axml。如果它有不同的名称,则需要在调用SetContentView()时指定正确的名称


我还建议从一开始就大大简化代码,以缩小可能出现问题的范围。当前,您的按钮单击将开始尝试访问数据库和执行其他操作,但我建议在执行该步骤之前,让您的单击处理程序正常工作。

未处理的异常:System.NullReferenceException:对象引用未设置为对象的实例。我使用了login_button=(button)findviewbyd(Resource.Id.button1);登录按钮。单击+=按钮1\u单击;是否使用包含按钮1的布局设置了调用SetContentView()?这需要在调用FindViewById()user=(EditText)FindViewById(Resource.Id.editText1)之前发生;passs=(EditText)FindViewById(Resource.Id.editText3);login_button=(button)findviewbyd(Resource.Id.button1);SetContentView(Resource.Layout.Main);登录按钮。单击+=按钮1\u单击;执行最后一行时出现错误消息为什么在附加单击处理程序之前再次调用SetContentView()?我假设您也在其他FindViewById()调用之前调用它,否则它们也不会工作。如果我不得不猜测,这是一个猜测,因为我这里没有太多的细节,我会说您的布局没有被称为Main,您正在通过重置布局丢失对UI元素的引用。如果您仍然有问题,请提供更多详细信息/代码(最好不要在注释中,以便可读)。您好,我添加了有问题的苏打水
button.Click += ButtonClicked;

private void ButtonClicked(object sender, EventArgs eventArgs)
{
    // handle button click here
}