ошибка установки настраиваемого атрибута при привязке данных - Android

У меня есть настраиваемый атрибут, который объявлен как тип строки, когда значение передается как просто строка в xml, как это app:cpb_title="sometsring", оно работает, но когда я пытаюсь привязать данные, как это app:cpb_title"@{model.someStringField}", это дает мне ошибку не удается найти установщик для приложения: cpb_title который принимает тип параметра java.lang.String

как я могу это исправить?

attrs.xml

  <declare-styleable name="CircularProgressBar">
    <attr name="cpb_hasShadow" format="boolean"/>
    <attr name="cpb_progressColor" format="string"/>
    <attr name="cpb_backgroundColor" format="string"/>
    <attr name="cpb_title" format="string"/>
    <attr name="cpb_titleColor" format="string"/>
    <attr name="cpb_subtitle" format="string"/>
    <attr name="cpb_subtitleColor" format="string"/>
    <attr name="cpb_strokeWidth" format="integer"/>
</declare-styleable>

класс внутреннего вида

 String t = a.getString(R.styleable.CircularProgressBar_cpb_title);
    if(t!=null)
        mTitle = t;

person Giorgi Abashidze    schedule 14.07.2020    source источник


Ответы (1)


Вы можете использовать BindingAdapter вместо объявления атрибутов в файле attrs.xml. . Пожалуйста, сделайте, как показано ниже:

class BindingUtil {

    @BindingAdapter("cpb_title")
    public static void setTitle(TextView view, String title) {
        view.setText(title);
    }
}

Затем вы можете использовать атрибут app:cpb_title в своем XML, как показано ниже:

               <Textview
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:cpb_title="@{model.someStringField}" />
person Shalu T D    schedule 14.07.2020
comment
спасибо за ответ, где я могу разместить этот @BindingAdapter(cpb_title)? внутри класса модели? или внутри пользовательского класса просмотра - person Giorgi Abashidze; 14.07.2020
comment
Вы можете разместить любой класс. Поместить в модельный класс - person Shalu T D; 14.07.2020