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 に答える