ObservableList 可观察的List,可以监听
- List排列顺序改变
- List中的数据发生改变(数据更新)
- List的数据添加及删除(数据新增或删除)
我自己的理解就是,类似于ajax的无刷新界面。因为你这个list跟前台界面绑定了,要是之前,你要重新绑定一下,然后刷新界面。现在有了这个类,就无需刷新界面,它会自动监听相关list进行事件处理。
1.排列更新监听
顺序排列更新,对应的change.wasPermutated()
,其返回值为boolean值,当ObservableList的顺序发生变化(即进行了排序操作),此方法就会返回为true
fun main() {
val observableList = observableListOf(0,1,2,3)
println(observableList)
observableList.onChange { change ->
while (change.next()) {
when {
change.wasPermutated() -> println("permutated (${change.from} ,${change.to})")
change.wasReplaced() -> println("replace (${change.from} ,${change.to})")
else -> {
when {
change.wasAdded() -> println("add (${change.from} ,${change.to})")
change.wasRemoved() -> println("remove (${change.from} ,${change.to})")
change.wasUpdated() -> println("update (${change.from} ,${change.to})")
}
}
}
}
}
observableList.sortBy { it }
println(observableList)
observableList.sortByDescending { it }
println(observableList)
}
对应的输出结果为:
[0, 1, 2, 3] //源数组
permutated (0 ,4) //回调监听器中的方法
[0, 1, 2, 3] //升序排列
permutated (0 ,4)
[3, 2, 1, 0] //降序排列
2.数据更新监听(replace)
这里大家可能会有点疑惑,最上面的代码不是有个wasUpdated()
方法吗,这里怎么标的是replace
?
我自己研究的时候,也是很奇怪...官方的那个wasUpdated()
方法没有找到对应的回调方式,照理说我更新了数组中的一个数据,这个wasUpdated()
应该返回的是true,但是实际测试的时候根本没有,反而是wasReplaced()
返回了true
//上面省略相关代码...
//JavaFx对应是set(index,element)方法
observableList[1] = 12 //下标为1的对象更新为12
println(observableList)
输出结果:
[0, 1, 2, 3]
replace (1 ,2)
[0, 12, 2, 3]
3.数据添加与删除监听(add remove)
数据添加和删除就和上面同理了,当我们调用add()
(包括addAll()
)和remove()
方法,对应的wasAdd()
和wasRemove()
方法就会返回true
另外,ObservableList提供了两个List供我们拿到添加的数据和移除的数据
- change.addedSubList 新增的数据列表
- change.removed 被移除的数据列表
文章参考:JavaFx ObservableList的使用详解 - Stars-one - 博客园 (cnblogs.com)