Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何以声明方式设置按钮onClick事件处理程序?_Android_Xamarin - Fatal编程技术网

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

Android 如何以声明方式设置按钮onClick事件处理程序?,android,xamarin,Android,Xamarin,首先,我表示歉意,因为我确信之前有人问过这个问题,但我找不到答案: 我正在使用Xamarin编写一个Android应用程序。如何以声明方式设置事件处理程序 目前我的axml中有一个按钮: Button android:layout_width="100dp" android:layout_height="100dp" android:id="@+id/btnOne" android:textSize="30dp"

首先,我表示歉意,因为我确信之前有人问过这个问题,但我找不到答案:

我正在使用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中单击触发方法btnone:

 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) { };
    }
}
}
使用系统;
使用Android.App;
使用Android.Content;
使用Android.Runtime;
使用Android.Views;
使用Android.Widget;
使用Android.OS;
名称空间AndroidMacScanner
{
[活动(Label=“MacScanner”,MainLauncher=true,Icon=“@drawable/Icon”)]
公共课堂活动1:活动
{
//整数计数=1;
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
//从“主”布局资源设置视图
SetContentView(Resource.Layout.Login);
//从布局资源中获取我们的按钮,
//并在其上附加一个事件
//Button Button=FindViewById(Resource.Id.MyButton);
//button.Click+=delegate{button.Text=string.Format(“{0}clicks!”,count++);};
//EditText EditText=findviewbyd(Resource.Id.txtPin);
//editText.InputType=输入类型;
}
公共空间单击(视图v)
{
如果(1==1){};
}
}
}
但是当我点击按钮时,我会收到一条消息,说应用程序已经停止工作,没有其他细节

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

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

怎么了

干杯


James

有几种方法可以处理视图上的单击事件:

XML方法(您文章中的方法):

或者您可以在代码中为按钮动态创建一个

    buttonDoStuff.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view){
            // Do stuff
        }
    });
对于仅在模拟器或实际设备上看到“应用程序已停止工作”的情况,这就是所谓的ANR(应用程序无响应)错误,它发生在dalivk jvm终止应用程序进程时。如果您使用Eclipse或Android Studio进行开发,您将需要检查日志猫,以获得错误的详细跟踪信息。这将帮助您在将来跟踪错误。

您需要指定 将属性[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) { };
}

发布一些你的代码和日志。顺便说一句,一旦按钮点击,你期待什么?移动到另一个活动或?这是迄今为止所有相关的代码-我只是进入Android的第一步:-)。事件没有被触发,因此无法命中断点,因此我不知道如何使用stacktace发布任何有用的内容?顺便说一句,我是用Visual Studio写这篇文章的。我研究了如何使用logcat,并在上面发布了相关的行。谢谢你的提示!哦,很抱歉,我没有意识到你在使用Xamarin,我的回答显示了如何在本地实现这一点。老实说,我建议你学习母语。以后它会省去很多麻烦,你的应用程序也会更加健壮和高效。我可能会来学习Java,但由于我们的大部分代码都是后端代码,如果我能让Xamarin工作,那么我就可以在Windows Phone、iOS、Android甚至Windows上使用大致相同的代码,因此绝对值得一试!恐怕你看到了第一个绊脚石;-)虽然我当然同意混合应用程序的诱惑,即每个平台都有一个单一的基础,乍一看肯定很吸引人,但你会发现有许多x因素让事情变得困难。(来自exp)它们包括:-与web一样的跨浏览器兼容性问题-忽略每个平台的设计指南。(在iOS上运行的可能不太适合Android或Windows phone的可用性模式)-所有的混合库总是比本机平台上的最新创新落后一步。我还没有测试过这一点,但这是唯一允许声明式设置事件处理程序的答案,如我的示例所示。这是我唯一一次看到这个问题,所以我希望它对下一个提出这个问题的人有用。
    buttonDoStuff.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view){
            // Do stuff
        }
    });
[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) { };
}