Xamarin.Android
Bindingen
Zoeken…
Typen verwijderen
Het is mogelijk om de Xamarin.Android Bindings Generator te instrueren een Java-type te negeren en niet te binden. Dit wordt gedaan door een XML-element met remove-node
toe te voegen aan het metadata.xml-bestand:
<remove-node path="/api/package[@name='{package_name}']/class[@name='{name}']" />
Java-interfaces implementeren
Als een Java-bibliotheek interfaces bevat die door de gebruiker moeten worden geïmplementeerd (bijvoorbeeld View.IOnClickListener
zoals View.IOnClickListener
of callbacks), moet de implementatieklasse - direct of indirect - erven van Java.Lang.Object
of Java.Lang.Throwable
. Dit is een veel voorkomende fout, omdat de verpakkingsstappen gewoon een waarschuwing afdrukken die gemakkelijk over het hoofd wordt gezien:
Type 'MyListener' implementeert Android.Runtime.IJavaObject maar erft niet van Java.Lang.Object. Het wordt niet ondersteund.
Mis
Het gebruik van deze implementatie leidt tot onverwacht gedrag.
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)
{
// ...
}
}
Bindingsbibliotheken kunnen methoden en interfaces hernoemen
Niet alles in een bindingsbibliotheek heeft dezelfde naam in C # als in Java.
In C # beginnen interfacenamen met "I", maar Java heeft een dergelijke conventie niet. Wanneer u een Java-bibliotheek importeert, wordt een interface met de naam SomeInterface
ISomeInterface
.
Op dezelfde manier heeft Java geen eigenschappen zoals C #. Wanneer een bibliotheek is gebonden, kunnen Java getter- en setter-methoden als eigenschappen opnieuw worden geactiveerd. Bijvoorbeeld de volgende Java-code
public int getX() { return someInt; }
public int setX(int someInt) { this.someInt = someInt; }
kan opnieuw worden ingevoerd als
public int X { get; set; }
wanneer het gebonden is.