Xamarin.Android
Bindungen
Suche…
Typen entfernen
Es ist möglich, den Xamarin.Android Bindings Generator anzuweisen, einen Java-Typ zu ignorieren und nicht zu binden. Dazu fügen Sie der Datei metadata.xml ein XML-Element zum remove-node
eines remove-node
hinzu:
<remove-node path="/api/package[@name='{package_name}']/class[@name='{name}']" />
Java-Schnittstellen implementieren
Wenn eine Java-Bibliothek Schnittstellen enthält, die vom Benutzer implementiert werden sollen (z. B. View.IOnClickListener
wie View.IOnClickListener
oder Callbacks), muss die implementierende Klasse direkt oder indirekt von Java.Lang.Object
oder Java.Lang.Throwable
. Dies ist ein häufiger Fehler, da die Verpackungsschritte lediglich eine Warnung ausgeben, die leicht übersehen wird:
Typ 'MyListener' implementiert Android.Runtime.IJavaObject, erbt jedoch nicht von Java.Lang.Object. Es wird nicht unterstützt.
Falsch
Die Verwendung dieser Implementierung führt zu unerwartetem Verhalten.
class MyListener : View.IOnClickListener
{
public IntPtr Handle { get; }
public void Dispose()
{
}
public void OnClick(View v)
{
// ...
}
}
Richtig
class MyListener :
Java.Lang.Object, // this is the important part
View.IOnClickListener
{
public void OnClick(View v)
{
// ...
}
}
Bindungsbibliotheken können Methoden und Schnittstellen umbenennen
Nicht alles in einer Bindungsbibliothek hat in C # denselben Namen wie in Java.
In C # beginnen Schnittstellennamen mit "I", Java hat jedoch keine solche Konvention. Wenn Sie eine Java-Bibliothek importieren, wird eine Schnittstelle namens SomeInterface
zu ISomeInterface
.
Ebenso verfügt Java nicht über Eigenschaften wie C #. Wenn eine Bibliothek gebunden ist, können Java-Getter- und Setter-Methoden als Eigenschaften umgestaltet werden. Zum Beispiel der folgende Java-Code
public int getX() { return someInt; }
public int setX(int someInt) { this.someInt = someInt; }
kann als umgestaltet werden
public int X { get; set; }
wenn es gebunden ist