Xamarin.Android
Bindningar
Sök…
Ta bort typer
Det är möjligt att instruera Xamarin.Android Bindings Generator att ignorera en Java-typ och inte binda den. Detta görs genom att lägga till ett remove-node
XML-element till metadata.xml-filen:
<remove-node path="/api/package[@name='{package_name}']/class[@name='{name}']" />
Implementering av Java-gränssnitt
Om ett java-bibliotek innehåller gränssnitt som ska implementeras av användaren (t.ex. klicka lyssnare som View.IOnClickListener
eller callbacks) måste implementeringsklassen ärva - direkt eller indirekt - från Java.Lang.Object
eller Java.Lang.Throwable
. Detta är ett vanligt fel eftersom förpackningsstegen bara skriver ut en varning som lätt förbises:
Skriv "MyListener" implementerar Android.Runtime.IJavaObject men ärver inte från Java.Lang.Object. Det stöds inte.
Fel
Användningen av denna implementering kommer att leda till oväntat beteende.
class MyListener : View.IOnClickListener
{
public IntPtr Handle { get; }
public void Dispose()
{
}
public void OnClick(View v)
{
// ...
}
}
Korrekt
class MyListener :
Java.Lang.Object, // this is the important part
View.IOnClickListener
{
public void OnClick(View v)
{
// ...
}
}
Bindningsbibliotek kan byta namn på metoder och gränssnitt
Inte allt i ett bindningsbibliotek kommer att ha samma namn i C # som det gör i Java.
I C # startar gränssnittsnamn med "jag", men Java har ingen sådan konvention. När du importerar ett Java-bibliotek blir ett gränssnitt som heter SomeInterface
ISomeInterface
.
På liknande sätt har Java inte egenskaper som C # gör. När ett bibliotek är bundet kan Java-getter- och setter-metoder refaktoreras som egenskaper. Till exempel följande Java-kod
public int getX() { return someInt; }
public int setX(int someInt) { this.someInt = someInt; }
kan refaktoreras som
public int X { get; set; }
när det är bundet.