【发布时间】:2017-07-05 17:02:09
【问题描述】:
我有一个这样的 POJO 类(我删除了不相关的字段)
public class FeedingTable {
private String Day;
private Integer Fasting; <-- note that this field is Integer
}
并在 Layout xml 中使用它:
<data>
<variable
name="friday"
type="models.FeedingTable" />
</data>
<!-- other views -->
<EditText
android:id="@+id/fasting"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:inputType="number"
android:text="@={friday.fasting}">
<!-- other views -->
当我编译我的项目时,我遇到了编译时错误,我检查了它并找出了为此布局生成的 java 类为 EditText 创建了一个 Short 字段,它在将 Short 转换为时遇到问题Integer.
// somewhere in generated java class
private android.databinding.InverseBindingListener fridayFastingandroidTextAttrChanged = new android.databinding.InverseBindingListener() {
@Override
public void onChange() {
// Inverse of friday.fasting
// is friday.setFasting((java.lang.Integer) callbackArg_0)
java.lang.Short callbackArg_0 = utilities.BindingUtils.getShortText(fridayFasting);
// localize variables for thread safety
// friday
models.FeedingTable friday = mFriday;
// friday.fasting
java.lang.Integer fridayFasting = null; <-- ???????!!!!!!
// friday != null
boolean fridayJavaLangObjectNull = false;
fridayJavaLangObjectNull = (friday) != (null);
if (fridayJavaLangObjectNull) {
friday.setFasting(((java.lang.Integer) (callbackArg_0))); <-- in this line I have error
}
}
};
为什么会这样?我尝试清理和重建项目,但没有成功。为什么数据绑定器创建 Short 而不是 Integer?如果你看到它是创建 java.lang.Integer fridayFasting = null; 但永远不要使用它。我对数据绑定器的工作原理感到非常困惑!
【问题讨论】:
标签: java android android-databinding 2-way-object-databinding