#android #android-livedata
#Android #android-livedata
Вопрос:
Я использую LiveData в XML-файле макета в Android Studio, Code A и Code работают хорошо.
Но код 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}"
/>
Комментарии:
1. #FFFFF — это не цвет. Есть только 5 F
2. Спасибо! Я все еще получаю ошибку
<expr> expected, got '#'
после того, как я ее исправил.
Ответ №1:
colors.xml
<resources>
<color name="colorOne">#f3f3f8</color>
<color name="colorTwo">#ffffff</color>
</resources>
Затем в вашем XML-макете
android:background="@{!aHomeViewModel.isHaveRecord ? @color/colorOne : @color/colorTwo }">
Ответ №2:
Привязка данных не может работать с жестко заданными шестнадцатеричными значениями.
Ваш лучший вариант — использовать:
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 )
Ответ №3:
Я думаю, что нет логического not
выражения для !
привязки данных / at
Может быть, вы можете заменить возвращаемое значение фоном вместо этого?
<androidx.recyclerview.widget.RecyclerView
...
android:background="@{aHomeViewModel.isHaveRecord ? #F3F3F8: #FFFFFF}"
/>