找不到Mono Droid onClick事件

Chr*_*ins 5 c# mono android xamarin.android

我有以下布局:

<Button android:id="@+id/MyButton"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/Hello"
    android:clickable="true"
    android:onClick="Foo"
/>
Run Code Online (Sandbox Code Playgroud)

这在我的活动中:

[Activity(Label = "LayoutTest", MainLauncher = true, Icon = "@drawable/icon")]
public class Activity1 : Activity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        SetContentView(Resource.Layout.Main);
    }

    public void Foo(View v)
    {
        Toast.MakeText(v.Context, "Bar", ToastLength.Long).Show();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在模拟器中调试此应用程序时,当我单击MyButton时,应用程序崩溃,并在日志中显示以下摘录:

E/AndroidRuntime(  507): FATAL EXCEPTION: main
E/AndroidRuntime(  507): java.lang.IllegalStateException: Could not find a method    Foo(View) in the activity class helloworld.Activity1 for onClick handler on view class android.widget.Button with id 'MyButton'
E/AndroidRuntime(  507):    at android.view.View$1.onClick(View.java:2059)
E/AndroidRuntime(  507):    at android.view.View.performClick(View.java:2408)
E/AndroidRuntime(  507):    at android.view.View$PerformClick.run(View.java:8816)
E/AndroidRuntime(  507):    at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime(  507):    at android.os.Handler.dispatchMessage(Handler.java:92)
Run Code Online (Sandbox Code Playgroud)

jpo*_*bst 8

MonoDroid不支持以这种方式注册事件.

您需要在活动的OnCreate中自己连接事件.

更新: 作为更新,MonoDroid现在支持这一点:http://docs.xamarin.com/guides/android/advanced_topics/java_integration_overview/working_with_jni/#_ExportAttribute_and_ExportFieldAttribute

  • 投票反应.希望我在其他地方看到这些信息,然后花时间在这上面. (2认同)

小智 5

除了方法的[Export ("javamethodname")]属性onClick和引用之外Mono.Android.Export,您还需要

using Java.Interop;
Run Code Online (Sandbox Code Playgroud)