当edittext的默认文本是浮点值时,编辑文本光标将重置为左侧

时间:2016-05-24 14:17:19

标签: android data-binding android-edittext android-databinding

我正在使用Binding适配器来防止针对2路绑定的edittexts的常量文本更新。

@BindingAdapter("binding")
public static void bindEditText(EditText editText, final String str) {
    if ((!editText.getText().toString().equals(str)) && !editText.getText().equals("")) {
        editText.setText(str);
    }
}

使用整数默认文本编辑文本时效果很好。但是,当使用浮动默认文本编辑文本时。例如:70.0,当我键入第一个数字时,编辑文本刷新并变为Ex:8.0。然后光标向左移动,所有后面的数字将添加到前面。例如:198.0

试过这个,但不起作用。

@BindingAdapter("binding")
public static void bindEditText(EditText editText, final String str) {
    if ((!(editText.getText().toString()+".0").equals(str)) && !editText.getText().equals("")) {
            editText.setText(str);
    }
}

任何解决方案?

1 个答案:

答案 0 :(得分:4)

我不确定每个人都知道:Android数据绑定现在支持双向绑定。您需要安装Android Studio 2.1,然后您可以使用额外的' ='双向绑定您的字段。字符:

<EditText android:text="@={user.name}" .../>

您不需要任何其他绑定适配器。

https://halfthought.wordpress.com/2016/03/23/2-way-data-binding-on-android/

那就是说,你要为String字段分配一个浮点数。使用Android Studio 2.2 gradle插件,您将能够使用此快捷方式,允许双向绑定与原始转换:

<EditText android:text="@={`` + data.floatNumber}" .../>

但是使用Android Studio 2.1,您必须自己进行转换绑定适配器。这个允许用户编辑字段,只接受有效的浮点数:

@BindingAdapter("android:text")
public static void setText(TextView view, float value) {
    boolean setValue = view.getText().length() == 0;
    try {
        if (!setValue) {
            setValue = Float.parseFloat(view.getText().toString()) != value;
        }
    } catch (NumberFormatException e) {
    }
    if (setValue) {
        view.setText(String.valueOf(value));
    }
}

@InverseBindingAdapter(attribute = "android:text")
public static float getText(TextView view) {
    try {
        return Float.parseFloat(view.getText().toString());
    } catch (NumberFormatException e) {
        return 0;
    }
}