【发布时间】:2019-12-24 14:05:36
【问题描述】:
我正在尝试在 EditText 上使用双向数据绑定。字符串值工作正常,但我无法让它为浮点值工作。
我尝试使用在此答案中找到的绑定适配器,但没有成功:Android DataBinding float to TextView
然后我在 android 开发者网站上找到了这个 Converter 类。 https://developer.android.com/topic/libraries/data-binding/two-way#kotlin
public class Converter {
@InverseMethod("stringToFloat")
public static String floatToString(float value) {
try {
return String.valueOf(value);
} catch (Exception e) {
return "";
}
}
public static float stringToFloat(String value) {
try {
return Float.parseFloat(value);
} catch (Exception e) {
return 0.0f;
}
}
}
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="16dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/width"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Width"
android:inputType="number"
android:text="@={Converter.floatToString(product.width)}"/>
data class Product(
val height: Float?,
val length: Float?,
val width: Float?,
val weight: Float?,
): BaseObservable() {
使用转换器类后,编译时出现以下错误:
error: cannot generate view binders java.lang.NullPointerException at android.databinding.tool.expr.Expr.lambda$join$0(Expr.java:771)
【问题讨论】:
-
你在你的xml中导入了Converter类吗?在数据
<import type="yourpackage.Converter"/>?? -
是的,我已经导入了课程。当我从文本属性中删除 = 时,编译正在工作并且 edittext 具有模型中的数据。
android:text"@{Converter.floatToString(product.width)}" -
检查 null 然后转换。初次使用数据绑定时,它将为空。
标签: android kotlin data-binding