Xamarin.Android
Wiązania
Szukaj…
Usuwanie typów
Można poinstruować Xamarin.Android Bindings Generator, aby ignorował typ Java i nie wiązał go. Odbywa się to poprzez dodanie elementu XML remove-node
do pliku metadata.xml:
<remove-node path="/api/package[@name='{package_name}']/class[@name='{name}']" />
Implementowanie interfejsów Java
Jeśli biblioteka Java zawiera interfejsy, które powinny zostać zaimplementowane przez użytkownika (np. View.IOnClickListener
takie jak View.IOnClickListener
lub wywołania zwrotne), klasa implementująca musi dziedziczyć - bezpośrednio lub pośrednio - z Java.Lang.Object
lub Java.Lang.Throwable
. Jest to częsty błąd, ponieważ etapy pakowania po prostu drukują ostrzeżenie, które można łatwo przeoczyć:
Wpisz „MyListener” implementuje Android.Runtime.IJavaObject, ale nie dziedziczy po Java.Lang.Object. To nie jest obsługiwane.
Źle
Zastosowanie tej implementacji spowoduje nieoczekiwane zachowanie.
class MyListener : View.IOnClickListener
{
public IntPtr Handle { get; }
public void Dispose()
{
}
public void OnClick(View v)
{
// ...
}
}
Poprawny
class MyListener :
Java.Lang.Object, // this is the important part
View.IOnClickListener
{
public void OnClick(View v)
{
// ...
}
}
Biblioteki powiązań mogą zmieniać nazwy metod i interfejsów
Nie wszystko w bibliotece powiązań będzie miało taką samą nazwę w języku C # jak w Javie.
W języku C # nazwy interfejsów zaczynają się od „I”, ale Java nie ma takiej konwencji. Podczas importowania biblioteki Java interfejs o nazwie SomeInterface
stanie się ISomeInterface
.
Podobnie Java nie ma właściwości takich jak C #. Gdy biblioteka jest powiązana, metody pobierające i ustawiające Java mogą być refaktoryzowane jako właściwości. Na przykład następujący kod Java
public int getX() { return someInt; }
public int setX(int someInt) { this.someInt = someInt; }
może być refaktoryzowany jako
public int X { get; set; }
kiedy jest związany.