Jonney Shih Jonney Shih - 5 months ago 8
Android Question

UI Components can't locate "onClick" callback methods

This is my XML code:

<Button
android:text="Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/MyButton"
android:id="@+id/button1"
android:onClick="sayHellow" /> //RELEVANT PART


And this is my main activity:

[Activity(Label = "FFFF", MainLauncher = true, Icon = "@drawable/icon", Theme = "@style/Theme.AppCompat.Light")]
public class MainActivity : AppCompatActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);

// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
}
public void sayHellow(View v) //CALLBACK FUNCTION
{
Snackbar.Make(v, "My text", Snackbar.LengthLong)
.Show();
}
}


Problem is I get a runtime error and the debug window complains that
Button
could not find "sayHellow" function, but as you can see I declared everything according to the docs.

Answer

You must export the method:

[Export("sayHellow")]
public void sayHellow(View v)
{
    Snackbar.Make(v, "My text", Snackbar.LengthLong).Show();
}

And you must add the reference to the Java.Interop.dll

enter image description here


A simpler solution would be:

Button button = FindViewById<Button> (Resource.Id.myButton);

button.Click += delegate {
    //Clicked
};
Comments