我正在尝试使用Data Binding Library为任何视图定义一个属性,如此 Android Developers post中所述。
为此,帖子说首先需要一个带有封闭<layout>
标签的布局:
<?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">
<LinearLayout android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:attribute='@{"name"}'/>
</LinearLayout>
</layout>
此时,布局引起了ClassNotFoundException
when inflated。我发现摆脱它的唯一方法是添加一个<data></data>
节点,即使 Android 开发人员帖子中没有它:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data></data>
...
</layout>
(帖子没有提到它,但我必须按照指南中的建议启用dataBinding
,然后才能构建。)build.gradle
该帖子然后解释了如何编写BindingAdapter
处理属性的方法:
import android.databinding.BindingAdapter;
import android.util.Log;
import android.view.View;
public class AttributesBindingAdapter {
@BindingAdapter("bind:attribute")
public static void bindAttribute(View view, String attributeName){
Log.e("PLN", attributeName);
}
}
但是,该bindAttribute
方法永远不会被调用。我确实在我的构建文件夹中看到了为布局生成的代码,但没有其他任何反应。