为什么生成的ViewDataBinding类为" include"注释属性?标记为Nullable

时间:2018-03-14 12:28:43

标签: android kotlin android-databinding

我使用Android数据绑定库来绑定具有<include>

的xml布局

layout.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
        <variable
            name="model"
            type="com.example.MyViewModel" />
    </data>

    ...

    <include
        layout="@layout/someOtherLayout"
        android:id="@+id/includedLayout" />
    ...

</layout>

在为xml生成的Databinding类中,我看到了这个属性:

@Nullable
public final com.example.databinding.SomeOtherLayoutBinding includedLayout;

为什么注释为@Nullable<include>在布局中,正如我所看到的,它显然是非空的。我错过了什么?

它强制我在访问包含布局的字段时在Kotlin代码中使用非空断言运算符!!,并且我想知道它是否安全或者是否有某些东西我是不考虑这里

val binder = DataBindingUtil.bind(view)
val someView = binder.includedLayout!!.someView

2 个答案:

答案 0 :(得分:1)

对于最新版本的数据绑定编译器(3.1.0)来解决包含布局的可空绑定的问题,您可以设置

android.databinding.enableV2=true

在项目内的 gradle.properties 文件中。

之后,您需要调用重建。之后,所有包含的布局绑定都将标有@NonNull注释。

答案 1 :(得分:0)

根据有关视图绑定的文档,当您有多个布局用于配置更改时,如果视图仅在某些配置中存在,则绑定类将被标记为可为空。

View Binding Docs