1

更新

事实证明,问题不在于 AndroidAnnotations。gradle 插件 3.0 中有一个 bug,在编译 DataBinding 视图时找不到生成的类。Android问题跟踪器存在问题。

原帖

将我的代码更新到 Android Studio 3.0(gradle 插件 3.0.0)后,我在使用 AndroidAnnotations 注释的所有自定义视图上遇到编译错误@EView

错误示例:

Cannot find the setter for attribute 'app:data' with parameter type com.example.databinding_aa.databindingaa.BindingData on com.example.databinding_aa.databindingaa.BindingViewAA_.`

所有错误都与使用 DataBinding@BindingAdapter注释的设置器有关。

下面是一个带注释的自定义视图的示例,以及它是如何集成到布局中的:

@EView
public class BindingViewAA extends AppCompatTextView {

    @BindingAdapter("data")
    public static void setData(BindingViewAA view, BindingData data) {
        view.setText(data.getBar() + data.getFoo());
    }

    public BindingViewAA(Context context) {
        super(context);
    }

    public BindingViewAA(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public BindingViewAA(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
}

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
    >

    <data>

        <variable
            name="greeting"
            type="String"/>

        <variable
            name="data"
            type="com.example.databinding_aa.databindingaa.BindingData"/>

    </data>

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

        <com.example.databinding_aa.databindingaa.BindingViewAA_
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:data="@{data}"/>

    </LinearLayout>
</layout>

和数据 POJO:

public class BindingData {

    private final String foo;
    private final String bar;

    public BindingData(String foo, String bar) {
        this.foo = foo;
        this.bar = bar;
    }

    public String getFoo() {
        return foo;
    }

    public String getBar() {
        return bar;
    }
}

有没有人在 Android Studio 3.0 中使用 AndroidAnnotations 和 DataBinding 取得成功?

4

0 回答 0