【发布时间】:2018-04-24 10:49:34
【问题描述】:
使用 Android 数据绑定,我可以执行以下操作:
<View
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@{() -> viewModel.onClick()}" />
我的ViewModel不必实现OnClickListener,只要有一个方法即可:
public void onClick() {
}
在我看来,它传递给 Xml 中的 onClick 属性的内容就像一个 lambda。
如何使用我自己的BindingAdapters 做到这一点?
我想要什么:
假设我想绑定触摸事件并且我想传递MotionEvent,我想这在 Xml 中看起来像这样:
<View
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:onTouch="(view, event) -> viewModel.onTouch(event)" />
和BindingAdapter 类似:
@BindingAdapter("onTouch")
public static void onTouch(View view, ??? lambda) {
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(final View v, final MotionEvent event) {
return lambda(event);
}
});
}
我确实不希望我的 ViewModel 实现 OnTouchListener 并将其绑定为:
@BindingAdapter()
public static void onTouch(View view, View.OnTouchListener onTouchListener) {
view.setOnTouchListener(onTouchListener);
}
我确实不想将触摸事件直接绑定到我的ViewModel,例如:
@BindingAdapter()
public static void onTouch(final View view, final MyViewModel myViewModel) {
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(final View v, final MotionEvent event) {
return myViewModel.onTouch(view, myViewModel);
}
});
}
这可以通过数据绑定实现吗?
【问题讨论】:
标签: java android data-binding android-databinding