使用 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)}"