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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow