LoginSignup
9
4

More than 3 years have passed since last update.

ImageViewにDataBindingをする方法

Posted at

はじめに

今回はImageViewにDataBindingをする方法を解説していきます。

やりたかったこと

<ImageView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:src="@{iconId}"/>

こんな感じでImageViewにリソースIDをDataBindingをしたかったのですが、なぜか上手くいきませんでした。

改善

<ImageView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  app:imageResource="@{iconId}"/>

これでできました!

なんでできないんだろうって考えていたんですが、公式のBindingAdapterを見て、そりゃできないなって思いました。
ちなみにこちらが既に用意されているBindingAdapterです。

Java
@BindingAdapter("android:src")
public static void setImageUri(ImageView view, String imageUri) { 
    if (imageUri == null) { 
      view.setImageURI(null); 
    } else { 
             view.setImageURI(Uri.parse(imageUri)); |
    } 
} 

@BindingAdapter("android:src")
public static void setImageUri(ImageView view, Uri imageUri) {           
    view.setImageURI(imageUri);
} 

@BindingAdapter("android:src")
public static void setImageDrawable(ImageView view, Drawable drawable) { |
    view.setImageDrawable(drawable);
} 

setImageResourceをしてくれるBindingAdapterはなかったんですね(笑)
そりゃできないわけだ、、、

ちなみに自作でBindingAdapterを作っても良さそうですね
作るとしたらこんな感じです

kotlin
@BindingAdapter("android:src")
fun ImageView.setImageResource(resourceId: Int) {
    setImageResource(resourceId)
}

というかResourceIdをセットすることを最初から想定しておいてほしいです、Googleさん、、、、

最後に

ImageViewがバグって表示されていて、なんでだろうなぁと小1時間くらい消費してしまいました。
想定通りの挙動をしない場合は、裏側で何をやっているかちゃんと確認した方がいいということを学べたのでよかったです(笑)

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4