我有这样的问题我想听变量的变化。
让我把var foo:Int = 10
初始化,并在代码的某个地方将其值更改为其他内容,让我们将foo = 99
更改为kotlin中的代码片段。
var foo:Int=10
private val changeSupport: PropertyChangeSupport? = PropertyChangeSupport(foo)
val observer = {
property: KProperty<*>,
oldValue: Int?,
newValue: Int? -> changeSupport!!.firePropertyChange(property.name, oldValue, newValue)
}
var oof: Int? by Delegates.observable(foo, observer)
changeSupport!!.addPropertyChangeListener { event ->
Log.d("loggg","Property [${event.propertyName}] changed " + "from [${event.oldValue}] to [${event.newValue}]")
}
因此,在代码的某处,我写foo = 99
我必须收到日志。我尝试了很多我遵循这篇文章但没有成功的东西。
我错过了什么吗?
How to create change listener for variable?
http://kotlination.com/kotlin/kotlin-observable-property-delegated-property https://www.javalobby.org/java/forums/t19476.html
答案 0 :(得分:0)
您正在尝试为您的媒体资源PropertyChangeSupport
而不是实例(包含媒体资源foo
)提供foo
。
例如PropertyChangeSupport(this)
。 docs
答案 1 :(得分:0)
所以解决方案比我想象的更简单。 我必须首先为变量分配委托和observable,如下所示。
var foo:Int? by Delegates.observable(10) { property, oldValue, newValue ->
Log.d("loggg","gggol")
}
每当我调用foo = something时,它会记录以下输出。 感谢。)