14

我很难@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。但是我错过了一些东西

4

6 回答 6

7

我遇到了同样的问题,我错过了使用绑定布局:

DataBindingUtil.setContentView(activity, layoutResId);
于 2017-01-28T20:36:54.873 回答
5

我建议对可绑定属性使用“绑定”命名空间,并对适配器参数和布局属性使用相同的名称。

适配器:

@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"。在您的布局根目录上:

 xmlns:bind="http://schemas.android.com/apk/res-auto"
于 2017-01-09T10:14:20.677 回答
4

请记住将以下行添加到您的应用程序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}" />

视图模型:

var errorOccurred = androidx.databinding.ObservableBoolean(false)
于 2019-11-18T22:45:49.520 回答
0

我只是在 build.gradle(:app) 的 android 块中的 compileOptions 和 kotlinOptions 之后放置了 buildFeatures 块。有效

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
    jvmTarget = '1.8'
}
buildFeatures {
 databinding true
}
于 2022-02-17T07:47:10.093 回答
0

将以下行添加到应用的 build.Gradle 文件中:

apply plugin: 'kotlin-kapt'

并在应用程序的 build.Gradle 文件的 android 块中启用数据绑定:

android {
.
.
buildFeatures {
    dataBinding true
}
.
.
}

创建 BindingAdapters.kt 文件并使用以下语法添加 @BindingAdapter:

@BindingAdapter("imageUrl")
  fun ImageView.bindImage(imgUrl: String){
  Glide.with(context)
  .load(imgUrl)
  .into(this)
  }

在视图的 xml 中使用 ImageView 中的 imageUrl='@{"YourImageUrl"}' 语法:

 <ImageView
 android:id="@+id/imageView3"
 android:layout_width="100dp"
 android:layout_height="100dp"
 android:background="@drawable/img"
 imageUrl='@{"YourImageUrl"}'/>

这很好用;)

我的项目 Gradle 版本:7.0.0

于 2021-09-07T09:34:00.023 回答
-2

app:imageUrl="@{item.imageUrl}"在 xml 中使用,请确保imageUrl在模型中调用了 String。

您必须传递图像的 url 链接,而不是 binderAdapter 的名称。

句法 :

app:BinderAdapterName="@{item.imagelink}"
于 2018-11-17T10:56:32.830 回答