我有一个扩展BaseObservable
的类,这个类包含双值
这是一个例子:
public class BindedValue extends BaseObservable {
public double value;
public TextWatcher setValue = new TextWatcherAdapter(){
@Override
public void afterTextChanged(Editable s) {
value = Double.parseDouble(s.toString());
}
};
}
然后我得到了xml
<data class="net.example.util.Value">
<variable
name="BindedValue"
type="net.makereal.makerealmaquette.domain.BindedValue"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:hint="Value"
android:addTextChangedListener="@{BindedValue.setValue}"
android:inputType="numberDecimal"
android:text="@{BindedValue.value}"/>
当我尝试运行或构建应用时,我收到此错误:
Cannot find the setter for attribute 'android:text' with parameter type double on android.widget.EditText.
然而,当我将类型更改为int时,应用程序构建没有问题。
有没有办法绑定双?
答案 0 :(得分:15)
然而,当我将类型更改为int时,应用程序构建时出现问题。
是的,但它会在运行时失败。 setText(int)
需要字符串资源ID,而不是任意int
。
有绑定双倍的方法吗?
android:text="@{Double.toString(BindedValue.value)}"
答案 1 :(得分:1)
这也是一个选项
android:text="@{String.ValueOf(BindedValue.value)}"
答案 2 :(得分:0)
此语法也适用:
android:text='@={""+item.value}'
,并且可以通过添加String
个setter来反转:
public void setValue(String value) {
this.setValue(Double.valueOf(value));
}