繁体   English   中英

Android懒惰数据绑定可能吗?

[英]Android lazy data binding possible?

Android数据绑定支持最酷的功能之一是它还为View设置了ID字段。 这样可以整理代码库,因为不需要字段或findViewById()调用。

但问题是绑定实例只能通过bind()调用来检索,该调用往往会调度绑定。 当异步接收数据并且通常抛出NullPointerException时,这很糟糕。

可以检索带有View字段的绑定实例减去实际的数据绑定过程吗?

堆栈跟踪:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Boolean.booleanValue()' on a null object reference
         at com.app.android.databinding.ActivityRestaurantDetailsBinding.executeBindings(ActivityRestaurantDetailsBinding.java:381)
         at android.databinding.ViewDataBinding.executePendingBindings(ViewDataBinding.java:350)
         at android.databinding.ViewDataBinding$6.run(ViewDataBinding.java:167)
         at android.databinding.ViewDataBinding$5.onViewAttachedToWindow(ViewDataBinding.java:137)
         at android.view.View.dispatchAttachedToWindow(View.java:14525)

这似乎没有意义,数据绑定将忽略空变量,因此不应该抛出空指针,也就是说,我相信,它是其最受推崇的功能之一。 如果你需要在异步调用等之后修改变量,你可以使用dataBinding.executePendingBindings()

来自文档

生成的绑定类将为每个描述的变量设置setter和getter。 变量将采用默认的Java值,直到调用setter为止 - 对于引用类型为null,对于int为0,对于boolean为false等。

生成的数据绑定代码会自动检查空值并避免空指针异常。 例如,在表达式@ {user.name}中,如果user为null,则将为user.name分配其默认值(null)。 如果您引用的是user.age,其中age是一个int,那么它将默认为0。

java.lang.Boolean遇到了同样的问题。 通过使用原始boolean类型来解决。

<variable
    name="var"
    type="boolean" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM