我使用两个形状可绘制对象rounded_corners.xml和rounded_corners_red.xml分别用于显示有效文本输入和无效文本输入。

我希望在用户单击登录按钮时动态设置此drwable,以便如果有效文本显示rounded_corners.xml,而无效文本显示rounded_corners_red.xml。

以下是我将其放入布局xml的方法。

<EditText android:id="@+id/et_ip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@={systemSettings.isValid ? @drawable/rounded_corners : @drawable/rounded_corners_red}"
android:text="@={systemSettings.serverIP, default=@string/ip_host}"
android:textColor="#000000" />

我希望根据我的模型类中定义的isValid可观察变量动态应用drawable。
我的代码编译没有错误。但这给了运行时错误
java.lang.RuntimeException: Found data binding errors.
****/ data binding error ****msg:The expression ((systemSettingsIsValidGet) ? (getDrawableFromResource(etIp, R.drawable.rounded_corners)) : (getDrawableFromResource(etIp, R.drawable.rounded_corners_red))) cannot cannot be inverted: The condition of a ternary operator must be constant: android.databinding.tool.writer.KCode@429a75fd
file:D:xxx\app\src\main\res\layout\fragment_system_settings.xml
loc:92:47 - 92:128
****\ data binding error ****

有人知道为什么会这样吗?
谢谢。

最佳答案

您的陈述是2向绑定(bind)@={}

@={systemSettings.isValid ? @drawable/rounded_corners : @drawable/rounded_corners_red}`

这就是为什么您发现错误说明表达式



它甚至可以直接给您提供原因:



但是,由于您只是获得可绘制的资源,因此只需从表达式中删除=即可。

08-18 15:55
查看更多