1

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

代码示例

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
    }








}
4

1 回答 1

2

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

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

SetContentView(Resource.Layout.Main);

声明布局后,您可以获取对布局中元素的引用。这使您可以获取对按钮的引用:

Button button = FindViewById<Button>(Resource.Id.MyButton);

一旦你有了它,你就可以挂钩该按钮上的 Click 事件,以便在单击按钮时进行处理:

button.Click += delegate { 
    // handle the click event here
};

或者,如果您想为单击处理程序使用单独的方法而不是内联定义它,您可以执行以下操作:

button.Click += ButtonClicked;

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

编辑(基于评论和更新的问题)

如前所述,在调用 FindViewById()之前需要调用 SetContentView()。SetContentView() 告诉 Android 你想为活动使用哪个布局,所以在你这样做之前,它不知道在哪里可以找到你的 UI 元素。将 SetContentView() 调用移到 FindViewById() 调用之上,并确保您想要的布局是 Main.axml。如果它有不同的名称,则需要在调用 SetContentView() 时指定正确的名称。

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

于 2012-06-18T13:38:46.570 回答