Xamarin.Android
Fijaciones
Buscar..
Quitando tipos
Es posible dar instrucciones al generador de enlaces de Xamarin.Android para que ignore un tipo de Java y no lo enlace. Esto se hace agregando un elemento XML de remove-node
al archivo metadata.xml:
<remove-node path="/api/package[@name='{package_name}']/class[@name='{name}']" />
Implementando interfaces Java
Si una biblioteca java contiene interfaces que deben ser implementadas por el usuario (por ejemplo, escuchas de clic como View.IOnClickListener
o callbacks), la clase implementadora debe heredar, directa o indirectamente, de Java.Lang.Object
o Java.Lang.Throwable
. Este es un error común, porque los pasos del paquete simplemente imprimen una advertencia que se pasa por alto fácilmente:
El tipo 'MyListener' implementa Android.Runtime.IJavaObject pero no hereda de Java.Lang.Object. No es compatible.
Incorrecto
El uso de esta implementación resultará en un comportamiento inesperado.
class MyListener : View.IOnClickListener
{
public IntPtr Handle { get; }
public void Dispose()
{
}
public void OnClick(View v)
{
// ...
}
}
Correcto
class MyListener :
Java.Lang.Object, // this is the important part
View.IOnClickListener
{
public void OnClick(View v)
{
// ...
}
}
Las bibliotecas de enlaces pueden renombrar métodos e interfaces.
No todo en una biblioteca de enlaces tendrá el mismo nombre en C # que en Java.
En C #, los nombres de las interfaces comienzan con "I", pero Java no tiene tal convención. Cuando importa una biblioteca Java, una interfaz llamada SomeInterface
se convertirá en ISomeInterface
.
Del mismo modo, Java no tiene propiedades como C # tiene. Cuando una biblioteca está vinculada, los métodos de obtención y establecimiento de Java se pueden refactorizar como propiedades. Por ejemplo, el siguiente código de Java
public int getX() { return someInt; }
public int setX(int someInt) { this.someInt = someInt; }
puede ser refactora como
public int X { get; set; }
cuando esta atado