【发布时间】: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:status和bind:pic,但在ImageView 中您使用的是app:status和app:pic- 这是错误的。您应该将bind:status和bind:pic更改为status和pic -
@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