我可以监控Kotlin中的变量吗?
我希望监视一个变量,当变量改变时,我会做一些事情,也许就像代码a一样 如何用Kotlin编写这些代码?谢谢 代码A我可以监控Kotlin中的变量吗?,kotlin,Kotlin,我希望监视一个变量,当变量改变时,我会做一些事情,也许就像代码a一样 如何用Kotlin编写这些代码?谢谢 代码A var myList: List<Int> registerMonitorVar(myList) fun onVariableChange(){ if (myList.size>=1){ btnDelete.enabled=true } } 代码2 allList.clear() allList.addAll(SettingHand
var myList: List<Int>
registerMonitorVar(myList)
fun onVariableChange(){
if (myList.size>=1){
btnDelete.enabled=true
}
}
代码2
allList.clear()
allList.addAll(SettingHandler().getListAllSetting().toMutableList()) //Observable Doesn't Work
您可以重写and setter
var myList: List<Int> // maybe here's a missing initialization
set(value) {
field = value
onVariableChange()
}
fun onVariableChange() {
if (myList.size >= 1) {
btnDelete.enabled = true
}
}
这个代码有效吗
对于注释,您可以使用以下内容:
private var allList = listOf<String>()
set(value) {
field = value
onVariableChange()
}
private var allList=listOf()
设置(值){
字段=值
onVariableChange()
}
Kotlin,非常适合此用例
vetoable就是做你想做的事。从文档:
可否决:返回读/写属性的属性委托,该属性 更改时调用指定的回调函数,允许 要求否决修改 例如,您可以使用:
var myList: List<Int> by Delegates.vetoable(listOf()) { property, oldValue, newValue ->
if (newValue.size >= 1)
true // apply the change to myList
else
false // ignore the change. ie. myList stay the same.
}
输出:
list = [1, 2, 3, 4]
list = [1, 2, 3, 4, 1, 2, 88, 9]
最后,你可以看看这个有ObservableList的nice,如果这是你需要的,最好用它而不是自己写。谢谢!,请看我修改的问题好吗?谢谢!如果我使用代码
allList.addAll(…)
更改allList的值,您的监视器代码将无法工作!请看我修改的问题。您可以使此列表不可变,并且人们只能“设置”您的列表。这样您就可以监视所有更改。谢谢!我如何使这个列表不可变,人们只能“设置”我的列表,你能给我一些示例代码吗?使用list
而不是MutableList
或ArrayList
或LinkedList
。见我的编辑谢谢!,请你看看我修改过的问题好吗?我将编辑我的答案,但是如果你问一个新问题,下次在这里发布链接会更好。非常感谢,在你的代码和ice1000的代码之间,哪一个更好?我想是我的。因为它给了你更多的灵活性,对我来说,我正在努力实现的目标更加明显。他们把它放在kotlin stander图书馆是有原因的。谢谢!如果我使用代码allList.addAll(…)
更改allList的值,您的监视器代码将无法工作!请看我修改过的问题。
var myList: List<Int> // maybe here's a missing initialization
set(value) {
field = value
onVariableChange()
}
fun onVariableChange() {
if (myList.size >= 1) {
btnDelete.enabled = true
}
}
private var allList = mutableListOf<String>()
set(value) {
field = value
onVariableChange()
}
fun onVariableChange() {
if (allList.size >= 1) {
}
}
private var allList = listOf<String>()
set(value) {
field = value
onVariableChange()
}
var myList: List<Int> by Delegates.vetoable(listOf()) { property, oldValue, newValue ->
if (newValue.size >= 1)
true // apply the change to myList
else
false // ignore the change. ie. myList stay the same.
}
var myList: List<Int> by Delegates.vetoable(listOf()) { property, oldValue, newValue ->
newValue.isNotEmpty()
}
var allList: MutableList<String> by Delegates.observable(mutableListOf<String>()) { property, oldValue, newValue ->
btnRestore.isEnabled = newValue.size >= 1
btnBackup.isEnabled = newValue.size >= 1
}
fun main(args: Array<String>) {
val myList = mutableListOf<Int>()
myList.addAllAndNotify(listOf(1, 2, 3, 4))
myList.addAllAndNotify(listOf(1, 2, 88, 9))
}
fun <E> MutableList<E>.addAllAndNotify(elements: Collection<E>) {
addAll(elements)
doStuff(this)
}
fun <E> doStuff(list: List<E>) {
println("list = ${list}")
}
list = [1, 2, 3, 4]
list = [1, 2, 3, 4, 1, 2, 88, 9]