【问题标题】:Get notified of variable change using PropertyChangeSupport(e.g. observable, delegate)使用 PropertyChangeSupport(例如 observable、delegate)获取变量更改的通知
【发布时间】:2018-05-02 20:20:35
【问题描述】:

我有这种问题,我想听听变量的变化。 让我初始化 var foo:Int = 10 并在代码中的某个地方将其值更改为其他值让 foo = 99 这是我在 kotlin 中的代码 sn-p。

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

【问题讨论】:

  • 属性监听器作用于属性,这些属性与变量并不完全相同。它们有(特殊的,通常是隐式的)方法来包装其值的访问和变异:正是这些访问器和变异器方法用于实现属性监听器。如果您想使用属性侦听器来侦听变量的更改,则必须确保您的变量是一个属性。也就是说,它是类的成员,而不是方法或类似方法的本地成员。你的问题不清楚:它已经是一个属性了吗?
  • 不,它是一个简单的变量,它会在应用程序运行时更改值,然后如果值从 A 更改为 Z,例如我必须显示一些 Toast。我怎样才能让它发挥作用?

标签: variables kotlin delegates observable


【解决方案1】:

所以解决方案比我想象的要简单。 我必须像这样最初用委托和可观察来分配变量。

 var foo:Int? by Delegates.observable(10) { property, oldValue, newValue ->

            Log.d("loggg","gggol")

        }

每次我调用 foo=something 时,它都会记录以下输出。 谢谢。)

【讨论】:

  • 谢谢,很好的答案 - 这是一个使用参数的示例:var observableData: String by Delegates.observable("Initial value") { property, oldValue, newValue -&gt; println("${property.name}: $oldValue -&gt; $newValue") }
【解决方案2】:

您正在尝试为您的属性foo 提供PropertyChangeSupport 而不是实例(包含属性foo)。

例如PropertyChangeSupport(this)docs

【讨论】:

  • 那么有没有办法实现只监听代码中简单的变量变化?
  • @ArmenHovhannisian 有一种方法(例如,正如您已经描述的那样)。我只是想解释一下PropertyChangeSupport 的使用方式错误。这是直接回答“我错过了什么”的观点
  • 好的,谢谢我明白,如果你想使用 PropertyChangeSupport,你应该有一个对象类并将其用于它的属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
相关资源
最近更新 更多