首先,我道歉,因为我确定以前曾经问过这个问题,但我无法找到答案:
我正在使用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;
所以它无法找到事件处理程序方法......
有什么问题?
干杯,
詹姆斯
答案 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) { };
}