使用双向数据绑定的逆布尔值
使用双向Android数据绑定,是否有可能具有通用逆布尔转换器?例如,我想要做这样的事情:使用双向数据绑定的逆布尔值
<Switch android:checked="@={!viewModel.myBoolean}" />
当我在Android中执行此操作时,交换机只是快速地来回发射。我尝试创建一个双向绑定app:inverseChecked
,下面是来自George Mount的一些示例,但我没有成功(只是不断收到错误,指出无法在View类型'android.widget.Switch')上找到事件'inverseCheckedAttrChanged'。
作为一个比较,使用Aurelia这只是作为你所期望的双向绑定。在WPF中,可能你制作的第一个转换器是某种InverseBooleanConverter,可以轻松解决这些问题。所以,我假设我在这里错过了一些明显的东西。
我其实并没有指望它能够工作。我认为,它总是来回切换,因为绑定不会应用绑定表达式的反函数。
这就是说,我测试了当前数据绑定库版本的行为并检查了生成的源代码。通过android:checked
这个简单的例子,这些节目会记录倒数应该是什么样子并适当地应用它。
而且乔治·芒写了一个博客文章关于它的前一段时间:https://medium.com/google-developers/android-data-binding-inverse-functions-95aab4b11873
如果试图实现一个app:inverseChecked
,你还不得不实施设置@BindingAdapter("inverseChecked")
作为二传手,@InverseBindingAdapter(attribute="inverseChecked")
作为getter和@BindingAdapter("inverseCheckedAttrChanged")
改变听众。
后者可能看起来像以下:
@BindingAdapter("inverseCheckedAttrChanged")
public static void setupInverseCheckedAttrChanged(Switch view, InverseBindingListener listener) {
OnCheckedChangeListener newListener = null;
if (listener != null) {
newListener = (v,b) -> listener.onChange();
}
view.setOnCheckedChangeListener(newListener);
}