我很难让@BindingAdapter
在我的项目中工作。
@BindingAdapter("imageUrl")
public static void setImageUrl(ImageView imageView, String url) {
Log.d("TEST","URL: " + url);
}
上面的代码显示了它在我的ViewModel中的实现方式。没什么特别的。
<ImageView
android:id="@+id/image_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:layout_below="@id/profile_container"
app:imageUrl="@{item.imageUrl}"
tools:src="@drawable/placeholder_image"/>
这不起作用。命名空间应用程序未绑定。所以我错过了什么。我试过跟随 https://medium.com/google-developers/android-data-binding-custom-setters-55a25a7aea47#.6ygaiwooh 并看看他们如何设置bindingAdapter。但是有一些我错过的东西
答案 0 :(得分:2)
我遇到了同样的问题,我错过了使用以下方法绑定布局:
DataBindingUtil.setContentView(activity, layoutResId);
答案 1 :(得分:1)
请记住将以下行添加到您应用的build.gradle
文件中:
apply plugin: 'kotlin-kapt'
并检查@BindingAdapter语法:
@BindingAdapter("visibleOnScreen")
fun View.setVisibility(isVisible: ObservableBoolean) {
if (isVisible.get())
this.visibility = View.VISIBLE
else
this.visibility = View.GONE
}
在视图的xml中:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:visibleOnScreen="@{viewModel.errorOccurred}" />
viewModel:
var errorOccurred = androidx.databinding.ObservableBoolean(false)
答案 2 :(得分:0)
我建议对可绑定属性使用“bind”命名空间,并为适配器参数和布局属性使用相同的名称。
@BindingAdapter("bind:imageUrl")
public static void setImageUrl(ImageView imageView, String imageUrl) {
Log.d("TEST","URL: " + imageUrl);
}
<ImageView
android:id="@+id/image_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:layout_below="@id/profile_container"
bind:imageUrl="@{item.imageUrl}"
tools:src="@drawable/placeholder_image"/>
其中名称空间“app”已替换为“bind”
答案 3 :(得分:-1)
尝试使用
@BindingAdapter({"bind:imageUrl"})
答案 4 :(得分:-1)
您正在xml中使用app:imageUrl="@{item.imageUrl}"
,请确保模型中有一个名为imageUrl
的字符串。
您必须传递图像的url链接,而不是bindingAdapter的名称。
语法:
app:BinderAdapterName="@{item.imagelink}"