Android - <Include/> 数据绑定

Android - <Include/> Data Binding

我已经阅读了一些示例和 Android 文档,但我的实现不起作用

我有我的 activity 和我的视图模型。

Activity布局

<?xml version="1.0" encoding="utf-8"?>
<layout>

    <data>
        <variable
            name="viewmodel"
            type="package.to.viewmodel"/>
    </data>

    <android.support.v4.widget.DrawerLayout>

        <include
            app:viewmodel="@{viewmodel}"/>

        <!-- More Code -->

    </android.support.v4.widget.DrawerLayout>
</layout>

包括布局

<?xml version="1.0" encoding="utf-8"?>
<layout>

    <data>

        <variable
            name="viewmodel"
            type="package.to.viewmodel"/>
    </data>

    <android.support.design.widget.CoordinatorLayout>

        <!-- More Code -->

        <android.support.design.widget.FloatingActionButton
            android:onClick="@{viewmodel.newButtonClickListener}"/>

    </android.support.design.widget.CoordinatorLayout>
</layout>

ViewModel代码

public class MainViewModelImpl implements MainViewModel {

    private View.OnClickListener newButtonClickListener;
    private View.OnClickListener newEventButtonClickListener;
    private View.OnClickListener newAssignmentButtonClickListener;
    private View.OnClickListener newContactButtonClickListener;
    private View.OnClickListener newChatButtonClickListener;

    //All the getters for the Listeners
}

所以代码构建和运行没有错误,但是当我点击按钮时没有任何反应,即使我的监听器已正确实现。

有没有人知道为什么没有触发侦听器?

更新 当我调试应用程序时,我发现 include 布局中的视图模型为空,即使在绑定之后也是如此。

当您在 include 中设置 viewModel 变量时,您应该使用 bind:viewmodel 而不是 app:viewmodel

我的数据绑定演讲中有一个示例 in the official documentation or in the demo project

我明白了,我在膨胀视图之前进行了绑定。所以现在可以了。

谢谢