gpt4 book ai didi

java - 如何在android中使用NumberFormat进行2路数据绑定(bind)?

转载 作者:行者123 更新时间:2023-12-02 01:13:53 29 4
gpt4 key购买 nike

我正在尝试格式化 editable TextInputEditText 中的值。这个想法是在用户输入值时显示千位分隔符。

我有一些 BigDecimal 值,并创建了转换器将其转换为应用格式的字符串:

 <com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/my_hint"
android:inputType="numberDecimal"
android:text="@={MyConverters.amountToString(obj.value)}"
/>

@InverseMethod("stringToAmount")
public static String amountToString(BigDecimal value){
if (value == null) {
return null;
}
return formatter.format(value);
}

public static BigDecimal stringToAmount(String value){
if (value == null){
return null;
}
try {
Number num = formatter.parse(value);
BigDecimal result = new BigDecimal(num.doubleValue());
return result;
} catch(ParseException | NumberFormatException ex) {
return null;
}
}

formatter - 是一个 NumberFormat 对象。

但是当我开始在应用程序中输入数字时,当该值以某种方式格式化(例如应用千位分隔符)时,光标会转到数字的开头。如何防止此类行为?
也许只有当焦点从 View 中丢失时才可以应用更改,但我不知道在必须应用更改时如何说绑定(bind)。

最佳答案

终于找到了一个解决方案(可能不够好,但有效)。

我使用 BindingAdapters 做到了:

<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/my_hint"
android:inputType="numberDecimal"
android:text="@={obj.value}" />

@BindingAdapter("android:text")
public static void bindBigDecimalInText(EditText editText, BigDecimal oldValue,
BigDecimal newValue) {
if (oldValue == null && newValue == null) {
return;
}

if (oldValue != null && newValue != null && oldValue.equals(newValue)) {
return;
}

editText.setText(amountToString(newValue));

editText.setSelection(editText.getText().length());
}

@InverseBindingAdapter(attribute = "android:text")
public static BigDecimal getBigDecimalFromBinding(TextView view) {
String string = view.getText().toString();

return stringToAmount(string);
}

关于java - 如何在android中使用NumberFormat进行2路数据绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57670937/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com