使用DataBinding将当前视图发送到ViewModel

时间:2016-12-19 08:54:18

标签: android android-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)}"
/>

爪哇

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
            }
        };
    }

1 个答案:

答案 0 :(得分:2)

只需传递您的View ID即可,

bind:onGlobalLayout="@{viewModel.onLayoutListener(viewId)}"