Bindings
Removing Types
Section titled “Removing Types”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}']" />Implementing Java interfaces
Section titled “Implementing Java interfaces”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.