Обновление отрисовывается с привязкой данных - PullRequest
0 голосов
/ 16 мая 2018

У меня есть ImageView, на котором я меняю альфа в зависимости от наличия строки.

XML

<data>
    <import type="android.text.TextUtils"/>
    <variable name="model" type="myPackage.Model"/>
</data>

<TextView
    android:text="@={model.stringAttribute}"/>

<ImageView
    android:alpha='@{model.stringAttribute.eqals("") ? 0.5f : 1.0f }'
    android:src="@drawable/thing"/>

И в моем activity:

binding.setModel(model);

Это работает за исключением того, что альфа на ImageView обновляется только при перезапуске действия.Я попытался добавить знак равенства после @, но он не скомпилируется.

Model

public class Model extends BaseObservable {
    private String stringAttribute;
    public void setStringAttribute(String s) {
        stringAttribute = s
        notifyPropertyChanged(BR.stringAttribute)
    }
    @Bindable
    public String getStringAttribute() {
        return stringAttribute;
    }
}

И чтобы уточнить, TextView обновляется, когда модельизмененоЭто просто альфа на ImageView, который не будет обновляться до тех пор, пока действие не будет перезапущено.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

= для двусторонней привязки, которая не имеет смысла для imageView (пользователь не может изменить изображение). Вы не показываете код для myPackage.Model. Убедитесь, что модель расширяет BaseObservable (есть и другие способы сделать это) и что установщик для stringAttribute вызывает notifyChange() или notifyPropertyChanged(), например ::

public void setStringAttribute(String val) {
    . . .
    notifyPropertyChanged(BR.stringAttribute);
}
0 голосов
/ 16 мая 2018
<data>
    <import type="android.text.TextUtils"/>
    <variable name="model" type="yourPackage.MainViewModel"/>
</data>

...

<ImageView
    android:alpha='@{TextUtils.isEmpty(model.stringAttribute) ? 0.5 : 1.0 }'
    android:src="@drawable/thing"/>

Убедитесь, что вы также настраиваете model от активности, такой как

binding.setModel(model);
...