【问题标题】:Android data binding on drawable可绘制对象上的 Android 数据绑定
【发布时间】:2017-08-14 17:55:35
【问题描述】:

我有两个 shape drawables,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 可观察变量动态应用可绘制对象。 我的代码编译没有错误。但它给出了运行时错误

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 ****

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

【问题讨论】:

  • 那么 gradle 控制台中的错误是什么?
  • @EugenMartynov Gradle 构建完成,出现 9 个错误和 2 个警告 - 这 8 个错误是因为在此主要错误之上数据绑定失败
  • 将@={} 更改为@{}

标签: android android-layout mvvm android-drawable android-databinding


【解决方案1】:

您的语句是 2 向绑定 @={}

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

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

不能倒置

它甚至直接给你理由:

三元运算符的条件必须是常数

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

【讨论】:

  • 是的。谢谢,这就是原因。
猜你喜欢
  • 2016-11-19
  • 1970-01-01
  • 1970-01-01
  • 2012-09-05
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
  • 1970-01-01
相关资源
最近更新 更多