Xamarin.Android
バインディング
サーチ…
タイプの削除
Xamarin.Android Bindings GeneratorにJavaタイプを無視し、バインドしないように指示することは可能です。これは、 remove-node
XML要素を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ライブラリをインポートすると、 ISomeInterface
という名前のインターフェイスがSomeInterface
になりISomeInterface
。
同様に、JavaにはC#のようなプロパティはありません。ライブラリがバインドされると、Javaのgetterメソッドとsetterメソッドがプロパティとしてリファクタリングされることがあります。たとえば、次のJavaコード
public int getX() { return someInt; }
public int setX(int someInt) { this.someInt = someInt; }
リファクタリングすることができます
public int X { get; set; }
それが結ばれているとき。