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

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

我正在使用绑定(bind)适配器来防止双向绑定(bind)的编辑文本的持续文本更新。

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

它可以很好地编辑具有整数默认文本的文本。但是当涉及到使用 float 默认文本编辑文本时。例如:70.0,当我键入第一个数字时,编辑文本刷新并变为例如: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);
    }
}

有什么解决办法吗?

最佳答案

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

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

您不需要任何额外的绑定(bind)适配器。

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

也就是说,您正在将 float 分配给字符串字段。借助 Android Studio 2.2 gradle 插件,您将能够使用一个快捷方式来实现原始转换的双向绑定(bind):

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

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

@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;
    }
}

关于android - 当 edittext 的默认文本为浮点值时,编辑文本光标重置为左侧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37416289/

相关文章:

slog 与 androi.util.log 日志记录之间的 Android 区别

Android Studio 2.1.2 渲染问题。 VectorDrawable_Delegate.nDraw

wpf - 是否有一种 MVVM 友好的方式来使用 WPF 中的 WebBrowser 控件?

c# - WPF 中用户控件的输入和输出

android - 将文本(或字符)与用户在 edittext for android 中的输入相结合

android - 如何从 android 平台构建中删除大量模块?

java - 在谷歌应用引擎的数据存储中更新查询 - java

data-binding - Grails 数据绑定(bind)

java - 在 Java 中带有永久提示的 EditText