使用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);
}
而且我不想将touch事件直接绑定到我的
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);
}
});
}
数据绑定可能吗?
最佳答案
可以将数据传递到视图模型,但是您还必须将视图与数据一起传递。所以在你的情况下。您需要做的如下。
<View
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@{() -> viewModel.onClick(view.someData)}" />
并在您的视图模型中。
public void onClick(View v,String someData) {
}
关于java - 以lamba为参数的BindingAdapter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49999808/