如何以声明方式设置Button onClick事件处理程序?

时间:2014-03-28 14:15:30

标签: android xamarin

首先,我道歉,因为我确定以前曾经问过这个问题,但我无法找到答案:

我正在使用Xamarin编写Android应用程序。如何以声明方式设置事件处理程序?

目前我在我的axml中有一个按钮:

    Button
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:id="@+id/btnOne"
        android:textSize="30dp"
        android:text="1"
        android:onClick="btnOneClick"

我想在我的Activity.cs中触发方法btnOneClick:

 using System;

using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;

namespace AndroidMacScanner
{
[Activity(Label = "MacScanner", MainLauncher = true, Icon = "@drawable/icon")]
public class Activity1 : Activity
{
    //int count = 1;

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

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

        // Get our button from the layout resource,
        // and attach an event to it
        //Button button = FindViewById<Button>(Resource.Id.MyButton);
        //button.Click += delegate { button.Text = string.Format("{0} clicks!", count++); };

        //EditText editText = FindViewById<EditText>(Resource.Id.txtPin);
        //editText.InputType = InputTypes;
    }

    public void btnOneClick(View v)
    {
        if (1 == 1) { };
    }
}
}

但是当我点击按钮时,我收到一条消息,说明应用程序已停止工作,没有其他细节。

编辑:添加了我的完整代码。 xml不包含除上述内容之外的任何相关内容。 logcat显示以下错误: 03-28 15:03:31.575 E / AndroidRuntime(5178):java.lang.IllegalStateException:无法在活动类androidmacscanner.Activity1中找到方法btnOneClick(View),用于视图类android.widget.Button上的onClick处理程序&#39; btnOne&#39;

所以它无法找到事件处理程序方法......

有什么问题?

干杯,

詹姆斯

2 个答案:

答案 0 :(得分:1)

您可以通过以下几种方式处理视图上的点击事件:

XML方法(帖子中的那个):

<!-- Declared in xml -->
<Button
    android:id="@+id/buttonDoStuff"
    android:layout_height="48dp"
    android:layout_width="96dp"
    android:onClick="doStuff"/>

// In your activity
public void doStuff(View view){// must reference a view
    // do some stuff
    System.out.println("Doing stuff woo hoo!");
}

Activity OnClickListener //不包含在xml中的onClick

public class MyActivity extends Activity implements OnClickListener {

    @Override
    public void onClick(View view) {
        // handle clicks by view id
        if(view.getId() == R.id.buttonDoStuff){
            // Do stuff
        }
    }

或者您可以动态创建代码

中的按钮
    buttonDoStuff.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view){
            // Do stuff
        }
    });

只看到&#34;应用程序已停止工作&#34;在模拟器或实际设备上,这是什么被称为ANR(应用程序无响应)错误,当dalivk jvm杀死应用程序进程时会发生这种错误。如果您使用Eclipse或Android Studio进行开发,则需要检查日志cat以查找错误的详细跟踪。这有助于您在将来追踪错误。

答案 1 :(得分:1)

您需要指定 将属性[Java.Interop.Export]添加到单击处理程序方法:

[Java.Interop.Export("btnOneClick")] // The value found in android:onClick attribute.
public void btnOneClick(View v) // Does not need to match value in above attribute.
{
   if (1 == 1) { };
}