Xamarin.Android
Наручники
Поиск…
Удаление типов
Можно дать указание генератору привязок Xamarin.Android игнорировать тип Java и не связывать его. Это делается путем добавления XML-элемента remove-node
в файл metadata.xml:
<remove-node path="/api/package[@name='{package_name}']/class[@name='{name}']" />
Внедрение интерфейсов Java
Если в java-библиотеке содержатся интерфейсы, которые должны быть реализованы пользователем (например, нажмите на прослушиватели, такие как View.IOnClickListener
или обратные вызовы), класс реализации должен наследовать - прямо или косвенно - из Java.Lang.Object
или Java.Lang.Throwable
, Это обычная ошибка, так как этапы упаковки просто печатают предупреждение, которое легко пропускается:
Тип «MyListener» реализует Android.Runtime.IJavaObject, но не наследует Java.Lang.Object. Он не поддерживается.
Неправильно
Использование этой реализации приведет к неожиданному поведению.
class MyListener : View.IOnClickListener
{
public IntPtr Handle { get; }
public void Dispose()
{
}
public void OnClick(View v)
{
// ...
}
}
Правильный
class MyListener :
Java.Lang.Object, // this is the important part
View.IOnClickListener
{
public void OnClick(View v)
{
// ...
}
}
Библиотеки привязок могут переименовывать методы и интерфейсы
Не все в библиотеке привязок будет иметь такое же имя в C #, как и в Java.
В C # имена интерфейсов начинаются с «I», но Java не имеет такого соглашения. Когда вы импортируете библиотеку Java, интерфейс с именем SomeInterface
станет ISomeInterface
.
Аналогично, у Java нет таких свойств, как C #. Когда библиотека привязана, методы getter и setter могут быть реорганизованы как свойства. Например, следующий код Java
public int getX() { return someInt; }
public int setX(int someInt) { this.someInt = someInt; }
могут быть реорганизованы как
public int X { get; set; }
когда он связан.