アンドリュースデータバインディング(d)のカスタムプロパティ

Androidのデータバインド()基本的な使い方 
Androidのデータバインディング(2)イベントハンドラ 
Androidのデータバインディング(3)観測可能な 
Androidのデータバインド(d)のカスタムプロパティ(紙) 
Androidのデータバインド(5)バインディングカスタムビューの道 
のAndroidデータバインディング(6)のEditTextネクタイTextChangedListenerとFocusChangeListener与えられました

序文

ビュー、setXXXメソッドを呼び出したときに、データバインディング。例えば、以下のコードは

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{user.name}" />

時間のsetText(String型のテキスト)メソッドを呼び出して、結合しました。 
TextViewがのsetText(文字列テキスト)法、無SetTextメソッド、またはメソッドSetTextメソッドシグネチャを持っていることを提供することは、十分ではない、同じではありません。 
だから、すべてのプロパティはデータバインディングで設定することができません。

方法がない場合には、2つの方法があります

同様の方法であるが、この方法は、同じ名前またはメソッドのシグネチャでない場合は1、既存の方法を設定することによって呼び出すことができます。

たとえば、アンドロイド:onClickの、ビューはsetOnClick方法はありませんが、setOnClickListener方法があり、およびメソッドのシグネチャは同じです。 
今回はトランジットするBindingMethodを使用することができます。

@BindingMethods({
        @BindingMethod(type = View.class, attribute = "android:onClick", method = "setOnClickListener")
})

@BindingMethodsそれにクラス名を定義します。 
あなただけのセッターの名前を変更したい場合はもちろん、それはまた、@BindingMethodsによって達成することができます。

たとえば、アンドロイド:paddingLeft、ビューは、唯一の方法をsetPadding、setPaddingLeft方法ではありません。 
今度は、カスタムメソッドを設定し、上記の方法で@BindingAdapter追加することができます。

@BindingAdapter("android:paddingLeft")
public static void setPaddingLeft(View view, int padding) {
   view.setPadding(padding,
                   view.getPaddingTop(),
                   view.getPaddingRight(),
                   view.getPaddingBottom());
}

2.いいえ同様に、対応するメソッドを追加します。 
例えば、アプリ:XXX属性 
メソッドのシグネチャは、アプリケーションである場合:セット内XXX財産価値、この方法はのsetXXX直接定義することができます。 
自分自身を着信上記のようsetPaddingLeftのようなメソッドのシグネチャも表示する必要がある場合には、setXXXメソッドの定義に加えて、あなたは@BindingAdapter追加する必要があります(「アンドロイド:XXX」)を

データバインディングライブラリは、カスタム属性の数を提供します

幸い、このよう上記のアンドロイドのようないくつかの共通の属性、:のonClickとAndroidは:paddingLeft、ライブラリを使用すると、設定で直接使用する必要はありません、あなたはセットアップを支援する必要があります。(具体android.databinding.adapters.ViewBindingAdapter参照)

マルチ属性バインディング

同じ方法は、複数の属性を同時に提供することができます

@BindingAdapter({"bind:imageUrl", "bind:error"})
public static void loadImage(ImageView view, String url, Drawable error) {
   Picasso.with(view.getContext()).load(url).error(error).into(view);
}

ピカソは、画像IMAGEURLとエラーを読み込む必要があります。同時に、定義が不可欠と呼ばれていたとき。

彼が呼び出したときに、そしてちょうどOKにrequireAll =偽を追加した1で定義されている場合は、上記の例では、それが呼び出す同時に設定されています。

@BindingAdapter(value = {"android:onViewDetachedFromWindow", "android:onViewAttachedToWindow"},
            requireAll = false)
    public static void setOnAttachStateChangeListener(View view,
            final OnViewDetachedFromWindow detach, final OnViewAttachedToWindow attach) {
}

アンドロイドでsetOnAttachStateChangeListener:onViewDetachedFromWindowやアンドロイド:ときコールを呼び出し1 onViewAttachedToWindow。

发布了24 篇原创文章 · 获赞 5 · 访问量 2万+

おすすめ

転載: blog.csdn.net/qq_26923265/article/details/82745466