在使用新的数据绑定API时,我发现你不能绑定到“style”属性。编译器抱怨它找不到样式。但是,如果我简单地设置样式,它会找到它。例如:
不工作:
style="@{TextUtils.isEmpty(row.getSubtitle()) ? @style/SubTitle : @style/Title}"
作品:
style="@style/SubTitle"
错误:
错误:任务“:app:compileDebugJavaWithJavac”的执行失败。
java.lang.RuntimeException:发现数据绑定错误。/数据绑定错误msg:标识符必须具有XML文件中的用户定义类型。SubTitle缺少它file:/~/test/app/src/main/res/layout/row.xml loc:48:71 - 48:78****\数据绑定错误****
4条答案
按热度按时间krugob8w1#
不幸的是,样式不支持数据绑定:https://code.google.com/p/android-developer-preview/issues/detail?id=2613
chy5wohz2#
虽然@bwhite是正确的,但您可以做一些变通方法。这取决于您需要有条件地更改什么。例如,如果您想根据条件更改字体(我需要这样做),您可以通过制作自定义绑定适配器来完成。
换句话说,做这样的事情:
然后在布局中,像这样:
我在我的代码中使用了这个,基于一个很棒的帖子:https://plus.google.com/+LisaWrayZeitouni/posts/LTr5tX5M9mb
okxuctiv3#
我发现了一个相当优雅的解决方案,用于在数据绑定中应用样式。我使用Paris library,然后为感兴趣的视图创建绑定适配器。例如:
在XML中:
viewModel.priceStyleResource
是我的视图模型中的一个MutableLiveData,它是用样式资源ID设置的。额外说明
您也可以直接为
View
类创建一个通用的bindStyle
绑定适配器,但在这种情况下,专门用于textviews的属性项(例如textColor
)将不会被应用。因此,由您来找到正确的平衡和命名。waxmsbnn4#
现在,我们可以这样设置样式:
别忘了从你的项目中导入“R”。
正确
不正确: