gpt4 book ai didi

三元运算符的Android双向DataBinding问题必须是常数

转载 作者:行者123 更新时间:2023-12-02 13:39:44 24 4
gpt4 key购买 nike

我的 EditText是这样的:

<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="@={viewModel.isAddCase? ``: `` + viewModel.currentStudent.age}" //problem here
android:inputType="number" />
我想要 EditText根据 isAddCase 不显示任何内容(空字符串)变量,即 MutableLiveData<Boolean> ViewModel 时初始化类对象被创建(在 init{} block 内)。
这是我得到的错误:
The expression '((viewModelIsAddCaseGetValue) ? ("") : (javaLangStringViewModelCurrentStudentAge))' cannot be inverted, so it cannot be used in a two-way binding

Details: The condition of a ternary operator must be constant: android.databinding.tool.writer.KCode@37a418c7

更新
即使这不起作用,也会显示相同的错误:
android:text="@={viewModel.currentStudent.age == 0? ``: `` + viewModel.currentStudent.age}"
我猜三元运算在双向 DataBinding 上效果不佳.

最佳答案

好的,这些天后我想出了完美的解决方案:
1. 创建BindingAdapter功能:

object DataBindingUtil {                                    //place in an util (singleton) class
@BindingAdapter("android:text", "isAddCase") //custom layout attribute, see below
@JvmStatic //required
fun setText(editText: EditText, text: String, isAddCase: Boolean) { //pass in argument
if (isAddCase) editText.setText("") else editText.setText(text)
}
}
  • 将多个参数从布局传递到 BindingAdapter功能:
    How can I pass multiple arguments via xml for a custom setter when using Android data binding

  • 2.在View中应用自定义属性:
    <EditText
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="2"
    android:inputType="number"
    android:text="@={`` + viewModel.currentStudent.age}" //two-way binding as usual
    app:isAddCase="@{viewModel.isAddCase}" /> //here
  • BindingAdapter仅在使用 EditText 时触发功能和自定义属性 同时 .
  • 关于三元运算符的Android双向DataBinding问题必须是常数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64596538/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com