android-databinding - 用于双向数据绑定的三元运算符
问题描述
我在可观察字段上使用三元运算符将文本设置为 xml 中的 textview。但它在编译时给了我以下错误。
****/ 数据绑定错误 ****msg: 表达式 ((vmEnteredAmountGetJavaLangString0) ? ("") : (vmEnteredAmountGet)) 不能反转:三元运算符的条件必须是常量: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}' />
任何帮助将不胜感激。谢谢。
解决方案
我也有这个问题,我认为三元运算不能很好地使用 two-way DataBinding
。我有以下解决方案。
方法1 | 适用于所有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 - XSD:正则表达式我不知道为什么它无效
- python-3.x - 嗨,我是 python 3 的新手,希望在列表中计算浮点数,该列表中同时包含浮点数和字符串
- python - Numpy max 仅在对数组的第一个元素上
- windows - Laradock:docker-compose.yml 在 Windows 上是无效格式 (PORT[/PROTOCOL])
- c++ - neovim 在执行 .out 文件时自动提供输入
- c++ - 智能指针可以通过禁止自动变量更安全吗?
- reactjs - 使用 Firebase 和匿名用户设置 Stream 活动供稿的推荐方法是什么?
- php - 使用Mpdf(Laravel)生成pdf时如何使用bangla字体
- variables - (Pinescript) 将当前柱形指示器状态永久存储在变量中?
- clojure - 递归树搜索:产生具有副作用的并发工作者