3

我正在尝试按照此处所述创建自定义设置器: https ://developer.android.com/tools/data-binding/guide.html#custom_setters

我的看法是:

<data>
        <variable name="viewModel"
        type="com.example.feed.DummyViewModel" />
</data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:imageUrl="@{viewModel.imageUrl}" />
    </LinearLayout>
</layout>

绑定是:

package com.example.feed;

import android.databinding.BaseObservable;
import android.databinding.BindingAdapter;
import android.widget.ImageView;

public class DummyViewModel extends BaseObservable {

    @BindingAdapter("bind:imageUrl")
    public static void loadImage(ImageView view, String url) {
// nothing yet
    }
}

文楼我收到错误:

Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> java.lang.RuntimeException: Found data binding errors.
 ****/ data binding error ****msg:Could not find accessor com.example.feed.DummyViewModel.imageUrl file:/Users/tse/t/app/src/main/res/layout/fragment_main.xml loc:20:28 - 20:45 ****\ data binding error ****

我的loadImage功能有什么问题?如何制作正确的绑定适配器?

4

3 回答 3

5

找不到访问器 com.example.feed.DummyViewModel.imageUrl

DummyViewModel 没有 get 方法:getImageUrl()

您也可以定义公共:

public String imageUrl
于 2016-07-13T02:27:03.063 回答
0

在像我这样的极少数情况下,Android Studio 会为您的字段生成 getter 和 setter,其签名比数据绑定期望的签名要多。让我通过示例向您展示我有一个字段private long pT;,当我使用 android 工具“Generate Getter and Setter”时,生成的方法看起来喜欢

public long getpT() {
    return pT;
}
public void setpT(long pT) {
    this.pT = pT;
}

正如您所看到的,通常的方法签名以 get 和 set 开头,然后是字段名称,在我的字段名称的第一个字符大写后,它没有,所以我手动将其更正getPTsetPT然后问题就解决了。因此,在为变量编写访问器时必须小心。

于 2018-09-19T03:41:24.103 回答
0

请注意,您实际上并未将 url 存储在任何地方。尝试这样的事情:

public class DummyViewModel extends BaseObservable {

    public String imageUrl;

    @BindingAdapter("bind:imageUrl")
    public static void loadImage(ImageView view, String url) {
        // nothing yet
    }
}

然后,无论您在哪里创建 DummyViewModel 的实例,都将 imageUrl 字段设置为图像的 Url。像这样的东西:

DummyViewModel viewModel = new DummyViewModel();
viewModel.imageUrl = "your_image_url_here";
MyViewBinding dataBinding = DataBindingUtil.inflate(inflater, R.layout.my_view, container, false);
dataBinding.setViewModel(viewModel);
于 2015-09-20T19:21:19.630 回答