用于双向数据绑定的三元运算符

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()
}

应用于您的EditTextapp:emptyIfZeroText="@={`` + viewModel.currentStudent.gpa}"