为什么我可以使用 android:background="@{!aHomeViewModel.isHaveRecord?#FFFFF: #F3F3F8}" 绑定数据?

Why can I binding data using android:background="@{!aHomeViewModel.isHaveRecord? #FFFFF: #F3F3F8}"?

我在 Android Studio 中的布局文件 XML 中使用 LiveData,代码 A 和代码运行良好。

但是C代码无法编译,我该如何解决?

错误信息

预期,得到“#”

代码A

<androidx.recyclerview.widget.RecyclerView
      ...                
      android:visibility="@{aHomeViewModel.isHaveRecord? View.VISIBLE: View.GONE}"
   />

代码B

  <androidx.recyclerview.widget.RecyclerView
      ...           
      android:background="#F3F3F8"     
   />

代码C

  <androidx.recyclerview.widget.RecyclerView
      ...           
      android:background="@{!aHomeViewModel.isHaveRecord? #FFFFFF: #F3F3F8}"     
   />

我认为 not / !data binding expression 是不合逻辑的

也许您可以将 return 值换成背景?

   <androidx.recyclerview.widget.RecyclerView
      ...           
      android:background="@{aHomeViewModel.isHaveRecord ? #F3F3F8: #FFFFFF}"     
   />

colors.xml

<resources>
    <color name="colorOne">#f3f3f8</color>
    <color name="colorTwo">#ffffff</color>
</resources>

然后在您的 xml 布局中

android:background="@{!aHomeViewModel.isHaveRecord ? @color/colorOne : @color/colorTwo }">

数据绑定无法处理硬编码 hex-values。

您最好的选择是使用:

android:background="@{aHomeViewModel.isHaveRecord ? @color/record : @color/noRecord}"

或者您可以尝试使用整数颜色值。它可能采用整数值。如果没有,上面的行是您唯一的选择。

// (FFFFFF)16 = (16777215)10
// (F3F3F8)16 = (15987704)10
android:background="@{aHomeViewModel.isHaveRecord ? 16777215 : 15987704}"

(https://www.binaryhexconverter.com/hex-to-decimal-converter)