数据绑定android更新imageview

时间:2016-07-25 08:44:17

标签: android data-binding android-databinding

您好我尝试使用数据绑定更新imageview,但我想知道如何正确操作。

我的var

@BindingAdapter({"bind:someImage"})
        public  void loadIt(ImageView view, String imageUrl) {
            Picasso.with(view.getContext())
                    .load(getSomeImage())
                    .placeholder(android.R.drawable.alert_dark_frame)
                    .into(view);
}

 public void setSomeImage(){
        notifyPropertyChanged(BR.someImage);
    }

我的布局

<ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imagePath"
      app:imageUrl="@{var.someImage}"/>

我有搜索但无法找到解决方案.... links = link1Link2Link 3

3 个答案:

答案 0 :(得分:6)

你使用了错误的属性来调用Binding方法,因为你已经定义了@BindingAdapter({"bind:someImage"}),你需要在从xml调用它时使用someImage

<ImageView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:id="@+id/imagePath"
  app:someImage="@{var.someImage}"/>

答案 1 :(得分:1)

您没有使用您在绑定适配器中设置的相同值,而是设置了@BindingAdapter({"bind:someImage"})并使用了app:imageUrl

改用它:

<ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imagePath"
      bind:someImage="@{var.someImage}"/>

示例:

@BindingAdapter("loadImageUrl")
fun loadImageUrl(imageView: ImageView, url: String) {
    Glide.with(imgView).load(url)
        .placeholder(PLACE_HOLDER_IMAGE)
        .into(imageView)
}

                <ImageView
                    loadImageUrl="@{vm.url}"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />

答案 2 :(得分:0)

如果您的数据模型包含图像的资源ID,则无需以编程方式执行任何操作即可执行此操作。

示例:

<layout>

<data>
<import type="android.support.v4.content.ContextCompat" />            
<variable
name="roomInfoItem"
type="com.example......model.RoomInfoModel" /> </data>

<RelativeLayout> 

 <ImageView
    android:id="@+id/iv_room_info_item"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
 />

</RelativeLayout>

</layout>

只需将以下行添加到您的imageView(当我在其中添加代码时,我无法格式化代码):

android:src =&#34; @ {ContextCompat.getDrawable(context,roomInfoItem.resId)}&#34;

其中resId包含R.drawable.your_image_name