Подтвердить что ты не робот

Android + привязка данных @style

При использовании новой привязки данных api я обнаружил, что вы не можете привязываться к атрибуту style. Компилятор жалуется, что он не может найти стиль. Однако, если я просто установил стиль как есть, он найдет его в порядке. Например:

не работает:

style="@{TextUtils.isEmpty(row.getSubtitle()) ? @style/SubTitle : @style/Title}"

работает:

style="@style/SubTitle"

Ошибка:

Ошибка: выполнение выполнено для задачи ': app: compileDebugJavaWithJavac'.

java.lang.RuntimeException: обнаружены ошибки привязки данных.     ****/ошибка привязки данных **** msg: Идентификаторы должны иметь определенные пользователем типы из файла XML. SubTitle отсутствует файл:/~/test/app/src/main/res/layout/row.xml loc: 48: 71 - 48:78 ****\ошибка привязки данных ****

4b9b3361

Ответ 2

Хотя @bwhite верен, могут быть обходные пути, которые вы можете сделать. Это зависит от того, что вам нужно условно изменить. Например, если вы хотите изменить шрифт на основе условия (которое мне нужно сделать), вы можете сделать это, создав адаптер привязки.

Другими словами, делать что-то вроде этого:

public class FontBindingAdapter {

    @BindingAdapter({"bind:font"})
    public static void setFont(TextView textView, String typefaceName){
        Typeface typeface;
        // Do something to convert a string to a typeface
        textView.setTypeface(typeface);
    }

Затем в вашем макете, например:

<TextView
   app:font="@{some_condition ? @string/typeface_string_name_bold: @string/typeface_string_name_bold_light}"

Я использовал это в своем коде на основе отличного сообщения: https://plus.google.com/+LisaWrayZeitouni/posts/LTr5tX5M9mb