用于双向数据绑定的三元运算符
Ternary operator for two way data binding
我在可观察字段上使用三元运算符将文本设置为文本视图 xml.But 它在编译时给我以下错误。
****/ data binding error ****msg:The expression ((vmEnteredAmountGetJavaLangString0) ? ("") : (vmEnteredAmountGet)) cannot be inverted: The condition of a ternary operator must be constant: android.databinding.tool.writer.KCode@1a6539af
下面是我的代码:
<EditText
android:id="@+id/txtAmount"
style="@style/AmountText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text='@={vm.enteredAmount.get()=="0"?"":vm.enteredAmount}'
app:decimalLen='@{6}' />
任何帮助都将是 appreciated.Thank 你。
我也有这个问题,我认为三元运算在 two-way DataBinding
上效果不佳。我有以下解决方案。
方法一 |适用于所有 EditText
:
object DataBindingUtil { //Kotlin singleton class
@BindingAdapter("android:text")
@JvmStatic
fun setText(editText: EditText, text: String?) {
if (text == "0" || text == "0.0") editText.setText("") else editText.setText(text)
}
}
方法二 |应用于所选 EditText
:
object DataBindingUtil {
@BindingAdapter("emptyIfZeroText") //use this instead "android:text"
@JvmStatic
fun setText(editText: EditText, text: String?) {
if (text == "0" || text == "0.0") editText.setText("") else editText.setText(text)
}
@InverseBindingAdapter(attribute = "emptyIfZeroText", event = "android:textAttrChanged")
@JvmStatic
fun getText(editText: EditText) = editText.text.toString()
}
应用于您的EditText
:app:emptyIfZeroText="@={`` + viewModel.currentStudent.gpa}"
我在可观察字段上使用三元运算符将文本设置为文本视图 xml.But 它在编译时给我以下错误。
****/ data binding error ****msg:The expression ((vmEnteredAmountGetJavaLangString0) ? ("") : (vmEnteredAmountGet)) cannot be inverted: The condition of a ternary operator must be constant: android.databinding.tool.writer.KCode@1a6539af
下面是我的代码:
<EditText
android:id="@+id/txtAmount"
style="@style/AmountText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text='@={vm.enteredAmount.get()=="0"?"":vm.enteredAmount}'
app:decimalLen='@{6}' />
任何帮助都将是 appreciated.Thank 你。
我也有这个问题,我认为三元运算在 two-way DataBinding
上效果不佳。我有以下解决方案。
方法一 |适用于所有 EditText
:
object DataBindingUtil { //Kotlin singleton class
@BindingAdapter("android:text")
@JvmStatic
fun setText(editText: EditText, text: String?) {
if (text == "0" || text == "0.0") editText.setText("") else editText.setText(text)
}
}
方法二 |应用于所选 EditText
:
object DataBindingUtil {
@BindingAdapter("emptyIfZeroText") //use this instead "android:text"
@JvmStatic
fun setText(editText: EditText, text: String?) {
if (text == "0" || text == "0.0") editText.setText("") else editText.setText(text)
}
@InverseBindingAdapter(attribute = "emptyIfZeroText", event = "android:textAttrChanged")
@JvmStatic
fun getText(editText: EditText) = editText.text.toString()
}
应用于您的EditText
:app:emptyIfZeroText="@={`` + viewModel.currentStudent.gpa}"