私はAndroid Data Binding
。このチュートリアルに従っています: Data Binding Library 。複数のパラメーターを受け取るアダプターを実行しようとしています。これは私のコードです:
[〜#〜] xml [〜#〜]
<ImageView
Android:layout_width="@dimen/place_holder_size"
Android:layout_height="@dimen/place_holder_size"
Android:layout_alignParentRight="true"
Android:layout_alignParentTop="true"
Android:layout_centerVertical="true"
app:url="@{image.imageUrl}"
app:size="@{@dimen/place_holder_size}"
/>
バインドアダプタクラス
public class ViewBindingAdapters extends BaseObservable {
@BindingAdapter({"bind:url", "bind:size"})
public static void loadImage(ImageView imageView, String url, int size) {
if (!Strings.isNullOrEmpty(url)) {
Picasso.with(imageView.getContext()).load(url).resize(size, size).centerCrop().into(imageView);
}
}
....
}
しかし、私はこのエラーを受け取っています:
Java.lang.RuntimeException:データバインディングエラーが見つかりました。 **** /データバインディングエラー**** msg:Android.widget.ImageViewでパラメータータイプJava.lang.Stringの属性 'app:url'のセッターが見つかりません。ファイル:... li_image_item.xml loc:30:27-30:40 **** \データバインディングエラー****
誰が理由を知っていますか??
前もって感謝します!
問題は@dimen/place_holder_size
、float
としてキャッチしている間にint
を返します
BindingAdapter
メソッドをこれに変更します
@BindingAdapter({"bind:url", "bind:size"})
public static void loadImage(ImageView imageView, String url, float size) {
}
this を参照できます
私が間違ったことは、関数内の引数の順序です。バインディングアダプタには複数の属性を追加できますが、メソッドで定義された同じシーケンスの引数と一致する必要があります。
Kotlinのコードスニペット
@BindingAdapter(value = ["bind:brand", "bind:model", "bind:age"], requireAll = false)
@JvmStatic
fun bindProductDetails(linearLayout: LinearLayout, brand: String?, model: String?, age: String?) {
if (brand != null && !brand.isEmpty()) {
//code
//code
}
}
これを試して
@BindingAdapter(value={"url", "size"}, requireAll=false)
public static void loadImage(ImageView imageView, String url, int size) {
if (!Strings.isNullOrEmpty(url)) {
Picasso.with(imageView.getContext()).load(url).resize(size, size).centerCrop().into(imageView);
}
}
プレフィックスbind:
を作成する必要はありません。これを使用するだけです。
@BindingAdapter({"url", "size"})
public static void loadImage(ImageView imageView, String url, float size) {
}
Xmlでは、app:
などのプレフィックスを使用します
app:url="@{image.imageUrl}"