Xamarin.Android
Attacchi
Ricerca…
Rimozione dei tipi
È possibile istruire Xamarin.Android Bindings Generator per ignorare un tipo Java e non vincolarlo. Questo viene fatto aggiungendo un elemento XML remove-node
al file metadata.xml:
<remove-node path="/api/package[@name='{package_name}']/class[@name='{name}']" />
Implementazione di interfacce Java
Se una libreria java contiene interfacce che devono essere implementate dall'utente (ad es. View.IOnClickListener
clic come View.IOnClickListener
o callbacks), la classe di implementazione deve ereditare, direttamente o indirettamente, da Java.Lang.Object
o Java.Lang.Throwable
. Questo è un errore comune, perché i passaggi della confezione stampano semplicemente un avviso che viene trascurato facilmente:
Digitare "MyListener" implementa Android.Runtime.IJavaObject ma non eredita da Java.Lang.Object. Non è supportato
Sbagliato
L'utilizzo di questa implementazione risulterà in un comportamento imprevisto.
class MyListener : View.IOnClickListener
{
public IntPtr Handle { get; }
public void Dispose()
{
}
public void OnClick(View v)
{
// ...
}
}
Corretta
class MyListener :
Java.Lang.Object, // this is the important part
View.IOnClickListener
{
public void OnClick(View v)
{
// ...
}
}
Le librerie di bind possono rinominare i metodi e le interfacce
Non tutto in una libreria di binding avrà lo stesso nome in C # come in Java.
In C #, i nomi delle interfacce iniziano con "I", ma Java non ha tale convenzione. Quando SomeInterface
una libreria Java, un'interfaccia denominata SomeInterface
diventerà ISomeInterface
.
Allo stesso modo, Java non ha proprietà come C #. Quando una libreria è vincolata, i metodi getter e setter Java potrebbero essere refactored come proprietà. Ad esempio, il seguente codice Java
public int getX() { return someInt; }
public int setX(int someInt) { this.someInt = someInt; }
può essere refactorato come
public int X { get; set; }
quando è legato.