C# · 12月 31, 2021

c# – Xamarin.Android:如何捕获OnClick XML属性中定义的Button事件?

我把这个Button放在一个RelativeLayout里面,作为自定义ListView行布局的一部分. <Button p1:text=”Edit” p1:layout_width=”75dp” p1:layout_height=”wrap_content” 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” />

当用户单击按钮时,我想要按钮调用此功能:

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滚动期间的性能下降.下面的解决方案是一个更好的选择.

解决方法 将属性[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程序集添加到项目中.

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