Android - <include>数据绑定

时间:2016-10-28 19:58:11

标签: android xml onclicklistener android-databinding

我正在阅读一些示例和Android文档,但我的实现无法正常工作

我的活动和视图模型。

活动布局

<?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布局中的视图模型即使在绑定之后也是null。

2 个答案:

答案 0 :(得分:1)

我想通了,我在给视图充气之前正在进行绑定。所以现在它有效。

由于

答案 1 :(得分:-1)

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

我的数据绑定谈话中有一个示例in the official documentationin the demo project