【问题标题】:How to update Imageview(android data binding) after getting response from retrofit从改造获得响应后如何更新 Imageview(android 数据绑定)
【发布时间】:2018-07-05 06:57:31
【问题描述】:

以下是布局文件: 我正在使用自定义设置器,即 BindingAdapter

<ImageView
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:layout_margin="@dimen/_8dp"
        android:layout_weight="4"
        android:gravity="center"
        android:padding="@dimen/_8dp"
        bind:pic="@{item.deviceType}"
        bind:status="@{item.deviceStatus}"
        />

图片将获得双发设备的 int 值 状态是布尔值。

这是我的绑定适配器:

 @BindingAdapter(value = {"bind:status","bind:pic"},requireAll = false)
public static void setImage(ImageView imageview,boolean status,int type){

    if(Integer.valueOf(type)==257){
        if(status)
            imageview.setImageResource(R.drawable.ic_lightbulb_on);
        else
            imageview.setImageResource(R.drawable.ic_lightbulb);

    }else if(Integer.valueOf(type)==516){
        if(status)
            imageview.setImageResource(R.drawable.ic_open_door);
        else
            imageview.setImageResource(R.drawable.ic_closed_door);
    }
}

现在我在绑定适配器执行后得到改造的响应,那么如何通知绑定我有数据并更新视图并再次调用绑定适配器?

【问题讨论】:

  • 请更清楚地说明您要达到的目标。是否从服务器获取 deviceType 和 deviceStatus?您将绑定适配器属性称为bind:statusbind:pic,但在ImageView 中您使用的是app:statusapp:pic - 这是错误的。您应该将 bind:statusbind:pic 更改为 statuspic
  • @Wess 是的,它从云端获取
  • 你为什么不用type == 257 而不是Integer.valueOf(type)==257
  • 好的。如果服务器返回 deviceType 和 deviceStatus 那么你应该只做yourViewModel.setDeviceType()yourViewModel.setDeviceStatus()。然后,数据绑定将自动调用您的 BindingAdapter 方法(如果您将 "bind:status" 固定为 "status" 并将 "bind:pic" 固定为 "pic")。我认为您唯一的问题是您命名错误的属性。
  • @Wess 数据绑定已经调用了我的方法,我也将应用程序更改为绑定,但是当响应到达时它不会更新它

标签: android android-databinding android-binding-adapter


【解决方案1】:

几个小时后,我找到了解决方案 你只需要添加

notifyChange();

在您从 API 获得响应之后。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 2019-08-29
    相关资源
    最近更新 更多