web-dev-qa-db-ja.com

バインディングアダプタが正しく機能しない

プロジェクトで@BindingAdapterを機能させるのに苦労しています。

@BindingAdapter("imageUrl")
public static void setImageUrl(ImageView imageView, String url) {
    Log.d("TEST","URL: " + url);
}

上記のコードは、ViewModelにどのように実装されているかを示しています。特にない。

    <ImageView
        Android:id="@+id/image_holder"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:scaleType="centerCrop"
        Android:layout_below="@id/profile_container"
        app:imageUrl="@{item.imageUrl}"
        tools:src="@drawable/placeholder_image"/>

これは動作しません。名前空間アプリはバインドされていません。だから私は何が欠けています。次のことを試してみました https://medium.com/google-developers/Android-data-binding-custom-setters-55a25a7aea47#.6ygaiwooh そして、それらがどのようにbindingAdapterを設定するかを確認しました。しかし、私が見逃したことがあります

11
Jemil Riahi

同じ問題が発生しました。次を使用してレイアウトをバインドできませんでした。

DataBindingUtil.setContentView(activity, layoutResId);
3
swapnil

バインド可能な属性には"bind"名前空間を使用し、アダプターパラメーターとレイアウト属性には同じ名前を使用することをお勧めします。

アダプタ:

@BindingAdapter("bind:imageUrl")
public static void setImageUrl(ImageView imageView, String imageUrl) {
     Log.d("TEST","URL: " + imageUrl);
}

レイアウト:

<ImageView
    Android:id="@+id/image_holder"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:scaleType="centerCrop"
    Android:layout_below="@id/profile_container"

    bind:imageUrl="@{item.imageUrl}"

    tools:src="@drawable/placeholder_image"/>

ここで、名前空間"app""bind"に置き換えられました

1
XIII-th

試してみてください

@BindingAdapter({"bind:imageUrl"})
0
Ravi Rupareliya