Xamarin.Android
Fixations
Recherche…
Suppression de types
Il est possible d'indiquer au générateur Xamarin.Android Bindings d'ignorer un type Java et de ne pas le lier. Cela se fait en ajoutant un élément XML remove-node
au fichier metadata.xml:
<remove-node path="/api/package[@name='{package_name}']/class[@name='{name}']" />
Implémentation des interfaces Java
Si une bibliothèque Java contient des interfaces qui doivent être implémentées par l'utilisateur (par exemple, des écouteurs de clic comme View.IOnClickListener
ou des rappels), la classe d'implémentation doit hériter - directement ou indirectement - de Java.Lang.Object
ou Java.Lang.Throwable
. C'est une erreur courante, car les étapes de l'emballage ne font qu'imprimer un avertissement qui est facilement ignoré:
Tapez 'MyListener' implémente Android.Runtime.IJavaObject mais n'hérite pas de Java.Lang.Object. Ce n'est pas supporté.
Faux
L'utilisation de cette implémentation entraînera un comportement inattendu.
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)
{
// ...
}
}
Les bibliothèques de liaisons peuvent renommer les méthodes et les interfaces
Tout dans une bibliothèque de liaisons n'aura pas le même nom en C # qu'en Java.
En C #, les noms d’interface commencent par "I", mais Java n’a pas de convention de ce type. Lorsque vous importez une bibliothèque Java, une interface nommée SomeInterface
devient ISomeInterface
.
De même, Java n'a pas de propriétés comme C # le fait. Lorsqu'une bibliothèque est liée, les méthodes Java getter et setter peuvent être modifiées en tant que propriétés. Par exemple, le code Java suivant
public int getX() { return someInt; }
public int setX(int someInt) { this.someInt = someInt; }
peut être restructuré comme
public int X { get; set; }
quand c'est lié