使用 DataBinding 将当前视图发送到 ViewModel
Send current view to ViewModel using DataBinding
我有一个BindingAdapter
喜欢
@BindingAdapter({ "onGlobalLayout" })
public static void setOnGlobalLayout(View view, ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener) {
ViewTreeObserver vto = view.getViewTreeObserver();
vto.addOnGlobalLayoutListener(onGlobalLayoutListener);
}
在XML我有一个View
喜欢
<View
android:id="@+id/viewId"
bind:onGlobalLayout="@{viewModel.onLayoutListener}"
/>
我在 ViewModel 中有
public ViewTreeObserver.OnGlobalLayoutListener onLayoutListener(View view){
return new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// get x,y,width, height of view
}
};
}
现在我想将当前 View
发送到 ViewModel
所以我将参数 View view
添加到 onLayoutListener
但在 XML 中我没有知道怎么发了。
任何帮助或建议将不胜感激
更新
感谢@pskink 建议一种检查布局更改的更好方法。
使用 android:onLayoutChange
我不需要 BindingAdapter
<View
android:id="@+id/viewId"
android:onLayoutChange="@{viewModel.onLayoutListener(viewId)}"
/>
Java
public View.OnLayoutChangeListener onLayoutUpdateWeightSuccessfulListener(final View v) {
return new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom,
int oldLeft, int oldTop, int oldRight, int oldBottom) {
// left, top
}
};
}
只需传递您的 View
id,它应该可以工作
bind:onGlobalLayout="@{viewModel.onLayoutListener(viewId)}"
我有一个BindingAdapter
喜欢
@BindingAdapter({ "onGlobalLayout" })
public static void setOnGlobalLayout(View view, ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener) {
ViewTreeObserver vto = view.getViewTreeObserver();
vto.addOnGlobalLayoutListener(onGlobalLayoutListener);
}
在XML我有一个View
喜欢
<View
android:id="@+id/viewId"
bind:onGlobalLayout="@{viewModel.onLayoutListener}"
/>
我在 ViewModel 中有
public ViewTreeObserver.OnGlobalLayoutListener onLayoutListener(View view){
return new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// get x,y,width, height of view
}
};
}
现在我想将当前 View
发送到 ViewModel
所以我将参数 View view
添加到 onLayoutListener
但在 XML 中我没有知道怎么发了。
任何帮助或建议将不胜感激
更新
感谢@pskink 建议一种检查布局更改的更好方法。
使用 android:onLayoutChange
我不需要 BindingAdapter
<View
android:id="@+id/viewId"
android:onLayoutChange="@{viewModel.onLayoutListener(viewId)}"
/>
Java
public View.OnLayoutChangeListener onLayoutUpdateWeightSuccessfulListener(final View v) {
return new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom,
int oldLeft, int oldTop, int oldRight, int oldBottom) {
// left, top
}
};
}
只需传递您的 View
id,它应该可以工作
bind:onGlobalLayout="@{viewModel.onLayoutListener(viewId)}"