Skip to content

Bindings

It is possible to instruct the Xamarin.Android Bindings Generator to ignore a Java type and not bind it. This is done by adding a remove-node XML element to the metadata.xml file:

<remove-node path="/api/package[@name='{package_name}']/class[@name='{name}']" />

If a java library contains interfaces that should be implemented by the user (e.g. click listeners like View.IOnClickListener or callbacks), the implementing class has to inherit — directly or indirectly — from Java.Lang.Object or Java.Lang.Throwable. This is a common error, because the packaging steps just print a warning that is overlooked easily:

Type ‘MyListener ’ implements Android.Runtime.IJavaObject but does not inherit from Java.Lang.Object. It is not supported.

Wrong

The usage of this implementation will result in unexpected behavior.

class MyListener : View.IOnClickListener
{
public IntPtr Handle { get; }
public void Dispose()
{
}
public void OnClick(View v)
{
// ...
}
}

Correct

class MyListener :
Java.Lang.Object, // this is the important part
View.IOnClickListener
{
public void OnClick(View v)
{
// ...
}
}

Bindings libraries may rename methods and interfaces

Section titled “Bindings libraries may rename methods and interfaces”

Not everything in a bindings library will have the same name in C# as it does in Java.

In C#, interface names start with “I”, but Java has no such convention. When you import a Java library, an interface named SomeInterface will become ISomeInterface.

Similarly, Java doesn’t have properties like C# does. When a library is bound, Java getter and setter methods might be refactored as properties. For example, the following Java code

public int getX() { return someInt; }
public int setX(int someInt) { this.someInt = someInt; }

may be refactored as

public int X { get; set; }

when it’s bound.