2016-12-15 61 views
2

我试图绑定:Android的数据绑定浮到TextView的

@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,然后点击第二次点击,但不能删除开始的数字。

+0

你能解释为什么你需要第一次点击textpad输入和第二次点击numberpad? –

+0

如果你阅读这个问题,你会发现这不是必需的,而是实际的行为。 – Luthervd

+0

嗨,roundInEdit是什么类型的变量 –

回答

0

尝试这样

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

如果你使用Android数据绑定库,它解决了创建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; 
     } 
    } 
}