为什么生成的 ViewDataBinding 类将“include”标记的属性注释为 Nullable

lel*_*man 6 android kotlin android-databinding

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

布局文件

<?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>
Run Code Online (Sandbox Code Playgroud)

在为 xml 生成的数据绑定类中,我看到了这个属性:

@Nullable
public final com.example.databinding.SomeOtherLayoutBinding includedLayout;
Run Code Online (Sandbox Code Playgroud)

为什么将其注释为@Nullable?该<include>是在布局,在我看来,这显然是不为空。我错过了什么?

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

val binder = DataBindingUtil.bind(view)
val someView = binder.includedLayout!!.someView
Run Code Online (Sandbox Code Playgroud)

Pai*_*ols 5

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

查看绑定文档


Con*_*Var 1

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

android.databinding.enableV2=true

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

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