Моя цель - двусторонняя привязка материала. Просмотр слайдера в MutableLiveData из моей модели просмотра:
<com.google.android.material.slider.Slider
...
android:value="@={viewmodel.fps}"
...
/>
Конечно, это не работает, потому что в библиотеке привязки androidx.databinding нет адаптера привязки данных для Slider
[databinding] Cannot find a getter for <com.google.android.material.slider.Slider android:value> that accepts parameter type <java.lang.Integer>. If a binding adapter provides the getter, check that the adapter is annotated correctly and that the parameter type matches.
Но у них есть один для SeekBar: / androidx / databinding / adapters / SeekBarBindingAdapter. java
Как я понимаю, двусторонняя привязка данных должна работать только с атрибутом "progress", а для односторонней привязки данных требуются два атрибута: "onChanged" и "progress".
Я попытался адаптировать SeekBarBindingAdapter для Slider:
@InverseBindingMethods({
@InverseBindingMethod(type = Slider.class, attribute = "android:value"),
})
public class SliderBindingAdapter {
@BindingAdapter("android:value")
public static void setValue(Slider view, int value) {
if (value != view.getValue()) {
view.setValue(value);
}
}
@BindingAdapter(value = {"android:valueAttrChanged", "android:onValueChange"}, requireAll = false)
public static void setOnSliderChangeListener(Slider view, final Slider.OnChangeListener valChanged, final InverseBindingListener attrChanged) {
if (valChanged == null)
view.addOnChangeListener(null);
else
view.addOnChangeListener((slider, value, fromUser) -> {
if (valChanged != null)
valChanged.onValueChange(slider, value, fromUser);
});
if (attrChanged != null) {
attrChanged.onChange();
}
}
@Override
public void onValueChange(@NonNull Slider slider, float value, boolean fromUser) {
}
Это не building:
Could not find event android:valueAttrChanged on View type Slider
, но почему он ищет valueAttrChanged, если я использую только
android:value="@={viewmodel.fps}"
?
Как мне найти правильный атрибут для добавления в BindingAdapter, если Я не вижу valueAttrChanged в классе Slider?