web-dev-qa-db-ja.com

配置先Android BindingAdapterメソッド?

これは最も基本的な質問である必要がありますが、チュートリアルとドキュメントを丸1日読んだ後で here これらのメソッドをどこに置くべきか理解できないようです。ガイドのどれも、このことの配置場所について言及していません。静的メソッドで注釈を使用することについて言及しているだけです。どのような静的メソッドですか?クラスに関係なく、静的メソッドはありますか?良い習慣とは何ですか?これらすべての静的メソッドをホストするCustomBindingクラスを作成しますか?

メソッドにBindingAdapter注釈があり、最初のパラメーターがビューである限り、機能しますか?

最初のパラメーターがView型である場合、任意の型のビューにバインディング属性を配置でき、メソッドをトリガーしますか? EditTextという特定のビューがある場合、これは、レイアウトファイルのEditTextビューで属性が見つかったときにのみメソッドが呼び出されることを意味しますか?

26
chaser

インターネットをナビゲートした後、私は最終的に開発者自身の1人から情報を見つけました。ドキュメントの基本がもっと明確になってくれたらいいのにと思います。

引用

バインディングアダプタは、これを行うために使用される任意のクラスの注釈付きメソッドです。通常、ターゲットビュータイプに基づいて、アダプターを[-a]クラスに編成します。

これは明らかに、コンパイル時にアノテーションBindingAdapterを持つクラスのすべてのメソッドがBindingAdapterを生成することを意味します。

23
chaser

モデルクラスに配置します。

例:

XML:

    <data>

    <variable
        name="item"
        type="com.yourpackage.Model"/>
      </data>
         ......

           <ImageView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:src="@{item.resId}"/>

モデル:

public class Model {

@DrawableRes
private final int resId;

public Model(int resId) {
    this.resId = resId;
}

public int getResId() {
    return resId;
}

@BindingAdapter ("Android:src")
public static void setImageResource(ImageView imageView, int resource){
    imageView.setImageResource(resource);
}

}

3
Manza