Xamarin.Android:如何捕获 OnClick XML 属性中定义的按钮事件?

Posted

技术标签:

【中文标题】Xamarin.Android:如何捕获 OnClick XML 属性中定义的按钮事件?【英文标题】:Xamarin.Android: How to capture Button events defined in the OnClick XML attribute? 【发布时间】:2013-12-10 11:03:53 【问题描述】:

我在 RelativeLayout 中有这个 Button,它作为自定义 ListView 行布局的一部分。

<Button
    p1:text="Edit"
    p1:layout_
    p1:layout_
    p1:id="@+id/editButton"
    p1:layout_centerHorizontal="true"
    p1:background="@drawable/btn_blue"
    p1:textColor="@color/white"
    p1:focusable="false"
    p1:layout_below="@id/sparyTableLayout"
    p1:textAppearance="?android:attr/textAppearanceMedium"
    p1:onClick="myClickHandler" />

当用户点击Button时,我希望Button调用这个函数:

public void myClickHandler(View v)

    Console.WriteLine ((v as Button).Text);

但是,我收到了这个错误

java.lang.IllegalStateException: Could not find a method myClickHandler(View) in the activity   class Test_Project.MyActivity for onClick handler on view class android.widget.Button with id 'editButton'

我试图区分该 ListView 中的不同按钮。此外,每一行都有多个按钮。

编辑:

不要在 Buttons 中使用标签,这会导致 ListView 滚动期间性能下降。下面的解决方案是更好的选择。

【问题讨论】:

【参考方案1】:

将属性[Java.Interop.Export] 添加到您的点击处理程序方法中:

[Java.Interop.Export("myClickHandler")] // The value found in android:onClick attribute.
public void myClickHandler(View v) // Does not need to match value in above attribute.

    Console.WriteLine ((v as Button).Text);

这将通过 Generated Callable Wrapper 为您的活动向 Java 公开方法,以便可以从 Java 运行时调用它。

见:

    Mono For Android 4.2 release notes 在标题为“导出任意 Java 成员以实现更好的 Java 集成”的部分中。

重要提示

使用[Java.Interop.Export] 需要您将Mono.Android.Export 程序集添加到您的项目中。

因此,此功能仅适用于独立和更高版本的许可证。

【讨论】:

我认为现在所有开发人员都可以使用它。不过答案很好!我已经在互联网上寻找了几个小时。

以上是关于Xamarin.Android:如何捕获 OnClick XML 属性中定义的按钮事件?的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin Android 监听音量键(下)

Xamarin 表单的 ANPR

如何检索元素父容器的属性

xamarin,android如何读写文件?给一下仔细步骤。

如何在 Xamarin.android 中更改条目光标颜色

如何将 Firebase 消息传递到 Xamarin.Android 应用程序?