更新
事实证明,问题不在于 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
注释的设置器有关。
- 它在 Android Studio 2.3.3 下运行良好
- 我创建了一个 GitHub 问题:链接到 GitHub 问题
- 我创建了一个示例项目来重现错误:链接到示例项目 (GitHub)
下面是一个带注释的自定义视图的示例,以及它是如何集成到布局中的:
@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 取得成功?