将Android Studio
更新为3.1.0
并将kotlin
版本更新为1.2.31
后,Observables
遇到了问题。
someVm的值为空。
class ViewModel1(car: Car) : BaseObservable() {
val someVm = ObservableField<ViewModel2>(ViewModel2(car))
shipmentVm.get()!!
}
class ViewModel2(car: Car) : ItemViewModel() {
val car= ObservableField(car)
}
open class ItemViewModel : BaseObservable() {
val first = ObservableField(false)
val last = ObservableField(false)
}
非常感谢你!
最佳答案
我通过子类化ObservableField解决了这个问题。 FWIW,这不是有效的liskov,因为它增强了先决条件,但目前效果很好。
如果从Java使用Null,则Null仍然可以爬到此类中(并导致NPE)。
import android.databinding.Observable
import android.databinding.ObservableField
class NonNullObservableField<T : Any>(
value: T, vararg dependencies: Observable
) : ObservableField<T>(*dependencies) {
init {
set(value)
}
override fun get(): T = super.get()!!
@Suppress("RedundantOverride") // Only allow non-null `value`.
override fun set(value: T) = super.set(value)
}
关于android - 更新至3.1.0后,ObservableField返回null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49517029/