Получить уведомление об изменении переменной с помощью PropertyChangeSupport (например, наблюдаемый, делегат) - PullRequest
0 голосов
/ 02 мая 2018

У меня есть такая проблема, которую я хотел бы услышать об изменении переменной. Допустим, у меня инициализирована 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 Я должен получить журнал. Я много чего перепробовал, следил за этой статьей, но безуспешно. Я что-то упустил?

Как создать прослушиватель изменений для переменной?

http://kotlination.com/kotlin/kotlin-observable-property-delegated-property https://www.javalobby.org/java/forums/t19476.html

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Так что решение было проще, чем я мог подумать. Я должен изначально назначить переменную с делегатом и наблюдаемой, как это.

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

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

        }

и каждый раз, когда я вызываю foo = что-то, он записывает следующий вывод. Спасибо.)

0 голосов
/ 03 мая 2018

Вы пытаетесь указать PropertyChangeSupport для своего свойства foo вместо экземпляра (который содержит свойство foo).

Например PropertyChangeSupport(this). документы

...