【问题标题】:Android DataBinding float to TextViewAndroid DataBinding浮动到TextView
【发布时间】:2016-12-15 00:20:17
【问题描述】:

我正在尝试绑定:

 @Bindable
public float getRoundInEditAmount()
{
    return roundInEdit.getAmount();
}

@Bindable
public void setRoundInEditAmount(float amount)
{
    roundInEdit.setAmount(amount);
    notifyPropertyChanged(BR.roundInEditAmount);
}

 <EditText
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:inputType="numberDecimal"
            android:text="@={`` + weightSet.roundInEditAmount}"
            ></EditText>

但是,在单击 EditText 时,我会看到一个文本输入而不是数字键盘。如果我再次单击此 EditText,则会看到数字键盘。如果该字段已默认为 50.0 或其他值,我无法删除这些金额。我可以输入文字,但它确实存在。

有没有其他人遇到过这种行为,第一次点击时出现的是文本输入而不是数字键盘? EditText 上的两种方式绑定也按我期望的方式工作。我已经编写了自己的 Binding 和 InverseBinding 适配器,它们的行为方式相同 -> 第一次单击时为 TextInput,然后在第二次单击时为数字键盘,但你不能删除你开始的数字。

【问题讨论】:

  • 你能解释一下为什么第一次点击需要文本输入,第二次点击需要数字键盘吗?
  • 如果您阅读该问题,您会发现这不是必需的,而是实际行为。
  • 你好,roundInEdit 是什么类型的变量
  • 你好,这是一个浮动
  • 您能发布您的自定义BindingAdapters 吗?您在初始绑定中将float 转换为string,这会导致键盘出现问题。

标签: android android-databinding


【解决方案1】:

这样试试

<EditText
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:inputType="numberDecimal"
            android:text="@={String.valueOf(weightSet.roundInEditAmount)}"/>

【讨论】:

    【解决方案2】:

    如果你使用Android Databinding Library,它通过创建binding adapter来解决。

    public class BindingUtils {
    
        @BindingAdapter("android:text")
        public static void setFloat(TextView view, float value) {
            if (Float.isNaN(value)) view.setText("");
            else view.setText( ... you custom formatting );
        }
    
        @InverseBindingAdapter(attribute = "android:text")
        public static float getFloat(TextView view) {
            String num = view.getText().toString();
            if(num.isEmpty()) return 0.0F;
            try {
               return Float.parseFloat(num);
            } catch (NumberFormatException e) {
               return 0.0F;
            }
        }
    }
    

    【讨论】:

    • 你如何在 xml 中使用它。当使用 android:text="@={BindingUtils.setFloat(marker.latitude)}" 和 EditText 我得到 找不到方法 setFloat(java.lang.String) 绑定错误
    • @Thracian 当您将float 类型的值分配给android:text XML 属性时,它会自动使用。
    • 我的问题是,它说:找不到接受类型 androidx.livecycle.MutableLiveData 的 getter
    • @Andrew 你能发布一些代码示例或添加新问题吗?
    • @XIII-th 没关系,这是我这边的问题,抱歉。
    猜你喜欢
    • 2010-12-28
    • 1970-01-01
    • 2020-06-23
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 2014-01-31
    • 2019-05-12
    相关资源
    最近更新 更多