DataBinding库包括不带变量的工作

时间:2016-02-15 14:01:25

标签: android android-databinding

作为George Mount said从1.0-rc4开始,我们在使用数据绑定时不再需要include中的变量:

buttons.xml:

<layout xmlns:andr...>
   <Button
    android:id="@+id/button"
    ...." />

main.xml中:

<layout xmlns:andr...
...
    <include layout="@layout/buttons"
            android:id="@+id/buttons"/>
....

但是我尝试了它并得到错误:

错误:(10,31)标识符必须具有XML文件中的用户定义类型。 toolbarViewModel缺少它

我有附带的工具栏:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">

    <data class="LoginPhoneFragmentBinding">

        <variable
            name="toolbarViewModel"
            type="ru.mobileup.myalarm2.binding.ToolbarViewModel"/>
    </data>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <include
             layout="@layout/toolbar"
             android:id="@+id/toolbarBinding"/>

工具栏布局为:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/primary"
    android:theme="@style/ToolbarThemeOverlay"
    app:navigationIcon="@{toolbarViewModel.navigationIconResId}"
    app:navigationOnClickListener="@{toolbarViewModel.navigationOnClickListener}"
    app:title="@{toolbarViewModel.title}"
    app:menu="@{toolbarViewModel.menuResId}"
    app:menuListener="@{toolbarViewModel.onMenuItemClickListener}"/>

有什么问题?

注意:我知道通过传递变量一切正常。我试图找出乔治提到的用途。

1 个答案:

答案 0 :(得分:0)

我认为你误解了乔治在链接帖子上的答案;如果要使用@{toolbarViewModel.title}引用它,仍然需要变量,就像在包含的工具栏布局中一样。

如果您在build.gradle中启用了dataBinding并将您的布局包装在额外的<layout>标记中,您将获得一个自动生成的ViewDataBinding类,其中包含对具有ID的任何视图的已解析引用您的布局(例如binding.toolbar或类似的东西)。这不会自动为您绑定数据,但可以让您摆脱任何findViewById来电。

有关详细信息,请参阅his blog post here