找不到带参数的属性的setter

Rav*_*avi 14 data-binding android android-databinding

我的工作DataBindingBindingAdapter.这是我的自定义方法.

@BindingAdapter("{bind:fadevisible}")
public static void setFadeVisible(LinearLayout view, int visible) {
    Log.e("Bindings", "setFadeVisible: ");
}
Run Code Online (Sandbox Code Playgroud)

在xml文件中,我称之为

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:fadevisible="@{1}"/>
Run Code Online (Sandbox Code Playgroud)

但它显示错误

错误:任务':app:compileDebugJavaWithJavac'的执行失败.java.lang.RuntimeException:发现数据绑定错误.****/数据绑定错误****消息:在android.widget.LinearLayout上找不到参数类型为int的属性'app:fadevisible'的setter.file:\ app\src\main\res-main\layout\activity_detail.xml loc:236:31 - 236:54****\data binding error****

我已经检查了这个这个帖子,但不知怎的,它没有帮助我,因为你可以看到我int从xml 传递,并且BindingAdapter我也提到LinearLayoutint有价值.

即使我有另一种方法,只是参数不同,工作正常

@BindingAdapter({"bind:image_round"}) 
public static void loadRoundImage(ImageView imageView, String url)
Run Code Online (Sandbox Code Playgroud)

tyn*_*ynn 11

你的@BindingAdapter定义对我来说有点奇怪

@BindingAdapter("{bind:fadevisible}")
Run Code Online (Sandbox Code Playgroud)

这不一样

@BindingAdapter({"bind:fadevisible"})
Run Code Online (Sandbox Code Playgroud)

要么

@BindingAdapter("bind:fadevisible")
Run Code Online (Sandbox Code Playgroud)

哪个应该工作得很好.


Mer*_*rka 11

我在绑定时遇到了这个问题,ImageView与您的情况不同,我的绑定适配器的定义是正确的,但 IDE 仍然不断给我这个错误消息。在花了很多时间寻找原因之后,我发现我在xml布局文件中使用的命名空间需要与我在@BindingAdapter.

所以,如果我的 xml 如下所示:

<ImageView
    android:id="@+id/logo"
    android:layout_width="32dp"
    android:layout_height="32dp"
    android:layout_alignParentRight="true"
    android:layout_marginRight="16dp"
    android:layout_marginTop="16dp"
    app:image_url="@{item.logoUrl}"
/>
Run Code Online (Sandbox Code Playgroud)

那么我的绑定方法应该如下:

@BindingAdapter({"app:image_url"})
public static void loadImage(ImageView view, String logoUrl) {
    if (logoUrl == null) {
        view.setImageResource(R.drawable.ic_place_holder);
    } else {
        Glide.with(getContext()).load(logoUrl).crossFade().into(view);
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,绑定方法注释指示其中的命名空间,即@BindingAdapter({"app:image_url"})与布局文件中使用的完全相同。app:image_url="@{item.logoUrl}"

所以不像什么是最教程说, 不要用 @BindingAdapter({"bind:image_url"})你绑定的方法和app:image_url="@{item.logoUrl}"你的xml文件。


Kis*_*nki 11

确保在应用程序级别gradle中 apply plugin: 'kotlin-kapt'