Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mono Droid onClick event not found

I have the following layout:

<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"
/>

And this in my Activity:

[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();
    }
}

When I debug this in the emulator the app crashes when I click MyButton with the following excerpt in the log:

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)
like image 313
Chris Hawkins Avatar asked Jul 17 '11 21:07

Chris Hawkins


2 Answers

MonoDroid does not support registering events in this way.

You need to hook up the events yourself in your activity's OnCreate.

Update: As an update, MonoDroid does now support this: http://docs.xamarin.com/guides/android/advanced_topics/java_integration_overview/working_with_jni/#_ExportAttribute_and_ExportFieldAttribute

like image 53
jpobst Avatar answered Nov 14 '22 23:11

jpobst


In addition to an [Export ("javamethodname")] attribute on the onClick methods and a reference to Mono.Android.Export, you also need

using Java.Interop;
like image 23
Brian G Avatar answered Nov 14 '22 22:11

Brian G