基于表达式的Android数据绑定

基于表达式的Android数据绑定,android,android-databinding,Android,Android Databinding,在android的数据绑定语法中,是否可以对表达式的结果执行嵌套三元运算,而无需计算表达式两次: 对于单三元情况,我有以下几点: android:textColor="@{stock.mStockDelta.compareTo(BigDecimal.ZERO) < 0 ? @color/red : @color/green}" 我想知道是否有一种方法可以只使用xml为三个比较结果{-1,0,1}中的每一个设置颜色?可能重复() 对于数据绑定中

在android的数据绑定语法中,是否可以对表达式的结果执行嵌套三元运算,而无需计算表达式两次:

对于单三元情况,我有以下几点:

android:textColor="@{stock.mStockDelta.compareTo(BigDecimal.ZERO) < 0 ?
                   @color/red : @color/green}"
我想知道是否有一种方法可以只使用xml为三个比较结果{-1,0,1}中的每一个设置颜色?

可能重复()

对于数据绑定中的高级逻辑,您应该将自己的逻辑放入方法中,并在xml中调用它

android:textColor="@{stock.mStockDelta.getColor}"
在getColor方法中执行您自己的逻辑,而不是在xml中设置许多条件。您应该保持xml完全可读。保留java类的逻辑流

 android:textColor="@{stock.mStockDelta.getColor > 2 ?( stock.mStockDelta.getColor ==3 ? @color/green :@color/colorPrimary): @color/colorAccent }"
你可以试试这个

android:textColor="@{stock.mStockDelta.compareTo(BigDecimal.ZERO) < 0 ?
               @color/red : (stock.mStockDelta.compareTo(BigDecimal.ZERO) > 0 ? @color/green : @color/blue)}"

但不建议这样做,您应该按照George Mount在此

中的建议将此逻辑置于视图模型中。您可以参考建议的RRR的答案。